Отладчик Lua, который может подключаться к процессу
В моей компании есть программа, которая использует Lua, встроенную в ее среду выполнения, загружая файлы .lua
с диска и выполняя определенные в них функции повторно.
Есть ли способ подключиться к выполняемому процессу и установить точки останова в моих файлах .lua
? (Я бы принял либо отладку командной строки в стиле gdb как часть дистрибутива Lua, либо, возможно, стороннюю среду IDE, которая обеспечивает точки доступа с графическим интерфейсом, подобные Visual Studio).
Или это то, что я прошу абсолютно бессмысленно и невозможно, учитывая природу среды выполнения, загружая случайные файлы с диска?
Изменить. Похоже, это не бессмысленно, учитывая, что функция Lua debug.getinfo()
может определять исходный файл для данной функции и debug.sethook()
позволяет обратный вызов для каждой введенной новой строки кода. Таким образом, разумно загружать исходный код с диска и быть в состоянии сказать, когда интерпретатор выполняет определенную строку кода из этого файла. Остается вопрос: как я могу запереть существующий процесс с интерпретатором Lua и ввести собственную функцию трассировки (которая затем может наблюдать за парами номеров файлов и строк и приостанавливать выполнение)?
Ответы
Ответ 1
Это альтернатива, которую я использую после многих поисков. Если у вас есть внешний исполняемый файл, который загружает lua, я заработал это через несколько минут. Операция очень отзывчива, у нее есть интерактивный отладчик, который загружает ваш код, вы можете разместить точки отладки в интерактивном режиме. У него нет редактора, но я использую scite или crimson editor и запускаю исполняемый файл, одна строка в вашем основном модуле lua позволяет отладчику.
http://www.cushy-code.com/grld/ - эта ссылка сейчас кажется мертвой
Я переехал в eclipse.org/ldt, у него есть идеал и встроенный отладчик, рекомендованный
HTH
Ответ 2
Если вы можете изменить файлы .lua
, вы можете вставить следующий вызов непосредственно перед тем, что вам нужно отлаживать:
require 'remdebug.engine'.start()
Он запускает RemDebug механизм отладки Lua и пытается подключиться к контроллеру. Если он не может подключиться, он будет продолжать работать как обычно. Я сделал некоторые исправления в движке отладчика, например, занимаюсь временными переменными, а мой ученик работает над графическим интерфейсом отладчика (ожидается в следующем году).
Тем временем вы можете попробовать, если Lua Development Tools работает для вас. Он имеет debugger, подобный RemDebug, который можно настроить следующим образом:
require("debugger")(host, port, idekey)
В качестве альтернативы вы можете использовать SciTE-debug, который является расширением для редактора SciTE и может служить контроллером для RemDebug. Просто убедитесь, что вы вставляете вызов remdebug.engine.start
где-то в свой код Lua и вставляете его в окно вывода SciTE:
:debug.target=remote.lua
Когда вы запускаете свою программу, SciTE должен показывать исходную и текущую строку.
Ответ 3
Я использовал Decoda для этого. Он позволяет подключаться к запущенному С++-приложению, после чего обнаруживает, что вы используете интерпретатор Lua в коде С++ и показываете свой исходный код Lua, где вы можете добавлять beakpoints и проверять переменные как обычно.
Ответ 4
Подобно тому, что описал Михал Коттман, я внедрил отладчик на основе RemDebug, но с дополнительными исправлениями и функциями (на github: https://github.com/pkulchenko/MobDebug).
Вы можете обновить файл .lua с помощью require("mobdebug").start("localhost", 8171)
в том месте, где вы хотите начать отладку. Затем вы можете использовать отладчик командной строки для выполнения команд, установки контрольных точек, оценки/выполнения выражений и т.д.
В качестве альтернативы вы можете использовать ZeroBrane Studio IDE, которая интегрируется с отладчиком и дает вам интерфейс для загрузки вашего кода и выполнять те же команды отладчика в приятном графическом интерфейсе. Если вы хотите увидеть IDE в действии, у меня есть простая демонстрация здесь: http://notebook.kulchenko.com/zerobrane/live-coding-in-lua-bret-victor-style.
Ответ 5
Плагин Lua для IntelliJ содержит рабочий отладчик, не требующий специальной настройки, кроме указания на ваш интерпретатор Lua.
Вот его скринкаст:
http://www.screencast.com/t/CBWIkoZPg
Ответ 6
Вероятно, вы должны использовать Decoda.
Перейдите к Debug -> Processes -> Attach
, чтобы прикрепить свой процесс. Это должно работать нормально.
Ответ 7
Ну, проще всего это, благодаря гениальному автору
https://github.com/slembcke/debugger.lua
вам не нужно настраивать удаленный сервер отладки, просто требуется один файл и просто вызвать dbg(), и он будет приостановлен, как и gdb
учебник также поставляется вместе с ним, проверьте его.