Перейти к содержимому

Лидеры


Популярный контент

Показан контент с высокой репутацией 18.05.2020 во всех областях

  1. 2 балла
    "Дело было вечером, Делать было нечего." С. В. Михалков Писал я себе спокойно программы на Java, но захотелось мне изучить C++. С этим я легко справился и подумал - что бы мне такое написать для практики? Решил написать что-нибудь с использованием какой-нибудь интересной библиотеки. Например Lua. Тут я и вспомнил про OC и решил накодить эмулятор. Не буду про него ничего писать - просто оставлю ссыль на реп - вот. Там в ридми все разжевано. Эмулятор написан на C++ с использованием библиотек lua и SDL. Код писал полностью сам, кроме поддержки юникода - библиотеку для этого я нашел на гитхабе и Crl+C Ctrl+V (ну лень было разбираться в этих кодировках). Эмулятор еще написан не до конца, но OpenOS на нем работает. Сейчас пишу поддержку интернет-карт. Да, я знаю о том, что этих эмуляторов уже хоть пруд пруди, но вдруг кому-то мой покажется лучше. В общем, пользуйтесь на здоровье.
  2. 1 балл
    Сейчас я покажу, как сделать это: На скрине выше — улучшенный debug.debug(). Он умеет: Бегать вверх-вниз по стэку вызовов независимо от того, где запущен. Показывать красивые стэктрейсы. Имитировать динамический скоуп: получать значения локальных переменных, редактировать их, не требуя возни с либой debug. При этом учитывает, на каком уровне в стэке вызовов он находится. Он не умеет: «Шагать» по коду, заходить внутрь функций, проскакивать над ними. Таким образом, это не совсем дебаггер. Но он может показать состояние всех доступных переменных. Чтобы заюзать в коде, нужно сделать так: require("dbg")() Впрочем, если в проге есть какой-то часто вызываемый сегмент, то безусловно падать в мини-дебаггер на каждой итерации очень печально. Поэтому можно задать условие, при котором его запускать. Например: require("dbg")(nonNegative < 0) У нас есть переменная nonNegative, которая семантически всегда неотрицательна. Если ж внезапно попалось что-то меньше нуля, есть смысл попросить программиста проверить, кто (и как) изобрёл свою алгебру. Команды: :bt — показать стэктрейс. :up — прыгнуть на уровень вверх. :down — спуститься на уровень вниз. :frame N — перейти на N-ый уровень. Выйти из интерпретатора можно, нажав Ctrl-D или Ctrl-C. Код: https://gist.github.com/Fingercomp/58388304f45bf6b2b8108e3b7a555315 (задумывался одноразовым, качество соответствующее). В обычной Lua надо просто кинуть содержимое куда-нибудь, откуда require тащит файлы. Чтобы это работало в OpenComputers, придётся пропатчить содержимое мода: Открываем jar-файл мода в архиваторе. Идём в /assets/opencomputers/lua. Открываем файл machine.lua и в районе 971 строки делаем как-то так: Сохраняемся и выходим. Если всё сделано правильно, в OpenComputers теперь доступна полная либа debug. Остаётся закинуть код мини-дебаггера, например, в /home/lib, дальше используем как обычно. Очевидно, что на серверах такое делать не надо. Ну, совсем не надо. Полной либой debug легко выудить нативную load. А это уже уязвимость. Но в сингле вещь незаменимая. Цитирую отзыв пользователя, пожелавшего остаться анонимным: Успехов вам в дезинсекции кода.
Эта таблица лидеров рассчитана в Москва/GMT+03:00
×
×
  • Создать...