Lua Debugger, который может присоединиться к процессу - PullRequest
11 голосов
/ 07 декабря 2011

В моей компании есть программа, которая использует Lua, встроенную в ее среду выполнения, загружая файлы .lua с диска и выполняя функции, определенные в них.

Есть ли способ присоединиться к запущенному процессу и установитьточки останова в моих .lua файлах? (Я бы принял отладку командной строки в стиле gdb как часть дистрибутива Lua, или, возможно, стороннюю IDE, предоставляющую точки останова GUI в стиле Visual-Studio.)

Или то, что я прошу, совершенно бессмысленно и невозможно, учитывая характер времени загрузки случайных файлов с диска?

Редактировать : Похоже, это не бессмысленно, учитывая, что у Луа *Функция 1013 *debug.getinfo() может определять исходный файл для данной функции, а debug.sethook() разрешает обратный вызов для каждой новой введенной строки кода.Таким образом, разумно загрузить исходный код с диска и иметь возможность определить, когда интерпретатор выполняет определенную строку кода из этого файла.Остается вопрос: как мне зафиксировать существующий процесс, который имеет интерпретатор Lua, и внедрить собственную функцию трассировки (которая может затем отслеживать пары номеров файлов / строк и приостанавливать выполнение)?

Ответы [ 7 ]

10 голосов
/ 07 декабря 2011

Если вы можете изменить файлы .lua, вы можете вставить следующий вызов непосредственно перед тем, как отлаживать:

require 'remdebug.engine'.start()

Запускает механизм отладчика Lua RemDebug и пытается подключиться к контроллеру. Если он не может подключиться, он просто продолжит работать как обычно. Я сделал некоторые исправления в движке отладчика, такие как работа с временными переменными, и мой ученик работает над графическим интерфейсом отладчика (должен быть в следующем году).

Тем временем вы можете попробовать, если Lua Development Tools работает для вас. Он оснащен отладчиком , похожим на RemDebug, который можно настроить следующим образом:

require("debugger")(host, port, idekey)

В качестве альтернативы вы можете использовать SciTE-debug , который является расширением редактора SciTE и может служить контроллером для RemDebug. Просто убедитесь, что вы вставили вызов к remdebug.engine.start где-то в вашем коде Lua и вставили его в окно вывода SciTE:

:debug.target=remote.lua

Когда вы запускаете вашу программу, SciTE должен показать источник и текущую строку.

5 голосов
/ 15 декабря 2011

Для этого я использовал Decoda редактор. Он позволяет вам подключаться к работающему приложению C ++, после чего он обнаруживает, что вы запускаете интерпретатор Lua в вашем коде C ++, и показывает ваш исходный код Lua, где вы можете добавлять точки привязки и проверять переменные, как обычно.

4 голосов
/ 12 декабря 2011

Это альтернатива, которую я использую после долгих поисков.Если у вас есть внешний исполняемый файл, который загружает lua, я получу это за несколько минут.Операционная система очень отзывчива, она имеет интерактивный отладчик, который загружает ваш код, вы можете размещать точки отладки в интерактивном режиме.У него нет редактора, но я использую scite или малиновый редактор и запускаю исполняемый файл, одна строка в вашем основном модуле lua включает отладчик.

http://www.cushy -code.com / grld / - эта ссылка кажется мертвой

Я перешел на eclipse.org / ldt , в ней есть ide и встроенный отладчик, рекомендуется

hth

3 голосов
/ 07 июня 2012

Подобно тому, что описал Михал Котман, я реализовал отладчик на основе 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.

3 голосов
/ 09 января 2012

Плагин Lua для IntelliJ имеет работающий отладчик, не требующий специальной настройки, кроме указания на ваш интерпретатор Lua.

Вот его скриншот:

http://www.screencast.com/t/CBWIkoZPg

1 голос
/ 16 декабря 2011

Вы, вероятно, должны использовать Decoda .
Перейдите на Debug -> Processes -> Attach, чтобы прикрепить ваш процесс. Это должно работать нормально.

0 голосов
/ 10 мая 2017

Что ж, самый простой способ - благодаря автору гения https://github.com/slembcke/debugger.lua

вам не нужно настраивать удаленный сервер отладки, достаточно одного файла и просто вызовите dbg ()пауза, так же, как GDB

учебник также поставляется с ним, проверьте его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...