Подтвердить что ты не робот

Отладка встроенных Lua

Как вы отлаживаете код lua, встроенный в приложение С++?

Из того, что я собираю, мне нужно купить специальную IDE и ссылку в их специальной среде выполнения lua (тьфу). Или мне нужно создать консоль отладки в игровом движке, используя lua debug API.

Я склоняюсь к написанию собственной консоли отладки, но это похоже на большую работу. Время, которое я мог бы лучше потратить на полировку других частей игры.

4b9b3361

Ответ 1

Есть несколько инструментов, плавающих вокруг, которые могут выполнять, по крайней мере, части того, что вы хотите. Я видел ссылки на плагин VS, в Lua для Windows есть расширение отладчика SciTE, и есть проект Kepler RemDebug, так как а также их LuaEclipse.

RemDebug может быть в курсе того, что вам нужно, поскольку он был создан для разрешения отладки сценариев CGI, написанных в Lua. Он требует доступа к модулю LuaSocket для обеспечения канала связи между целевым script и контроллером, а также несколькими другими модулями.

Более серьезной проблемой может быть возможность загрузки произвольных модулей из любой изолированной среды, в которой движок игры помещает ваши скрипты. Если у вас есть некоторый контроль над движком, тогда это не будет проблемой.

В настоящее время это невозможно для разработчиков плагинов Adobe Lightroom, например, потому что Lightroom не раскрывает require внутри изолированной программы plugin.

Неожиданностью для меня стало то, как редко я чувствовал потребность в отладчике при работе с Lua. Я разработал несколько небольших приложений в нем для различных проектов и был удивлен тем, насколько хорошо сочетаются полные стековые обратные трассы и случайный вызов print, чтобы найти ошибки, которые require "strict" не помешали в первую очередь.

Ответ 2

Как насчет Decoda?? есть видео, в котором объясняется, как его использовать, и он отлично подходит для встроенного источника lua. (я счастливый клиент). и это довольно дешево.

Ответ 3

Я не вижу, как работать с DebuggerBreak, поскольку это специфично для .NET. Я бы предположил, что работает только с разветвленной Lua, нацеленной на CLR.

Если вы используете стандартную Lua, у вас есть некоторые способы отладки с помощью функции lua function debug.debug(). Это запустит Lua в вашу консоль, поэтому, если вы запускаете lua с консоли, вы должны в интерактивном режиме вывести команды lua для проверки вашего текущего состояния. debug.debug() не помещает вас в текущий стек стека, поэтому вам нужно использовать debug.getlocal() для чтения значений ваших переменных.

Я еще не пробовал это сам, но на самом деле я не думаю, что создание собственной рабочей отладочной консоли - это большая работа. Помните, что Lua - это не такой сложный язык, как С++, поэтому сделать это намного проще, чем сделать настоящий отладчик С++, например say gdb.

Я думаю, что есть много людей, которые уже делали подобные вещи, чей код вы могли бы посмотреть. Здесь - отладчик CLI, написанный только в lua. Всего один файл lua. Не следует жестко использовать и изменять для ваших нужд.

Ответ 4

Вы можете использовать мой отладчик: GRLD (графический удаленный отладчик lua). Как и RemDebug, он использует соединение сокета, но в отличие от RemDebug имеет приятный графический интерфейс. Исходный код предоставляется, поэтому вы можете заставить его работать на любой платформе. Он работает со стандартным временем выполнения lua. Бесплатно для некоммерческого использования.

EDIT: извините, мне пришлось закрыть веб-сайт, поэтому программное обеспечение больше не доступно для загрузки. Я могу опубликовать его в качестве программного обеспечения с открытым исходным кодом позже, если я когда-либо найду время.

EDIT 2: ссылка обновлена, теперь размещена в github по лицензии MIT (с открытым исходным кодом)

Ответ 5

Вам не нужно писать свою консоль, так как вы можете начать с одного из существующих. RemDebug уже был предложен; Я разрабатываю MobDebug, который является отладчиком на основе RemDebug, но с множеством новых функций и исправлений ошибок. Подробный список изменений находится в README.

Включение отладки в script может быть таким же простым, как добавление require('mobdebug').start() (если вы используете приложение и сервер отладчика на том же компьютере). Это должно попытаться подключиться к отладчику, прослушивающему порт по умолчанию на localhost. Вы можете использовать интерфейс командной строки, включенный в MobDebug, или вы можете использовать ZeroBrane Studio, которая является Lua IDE, которая интегрируется с MobDebug для предоставления возможности отладки. IDE поддерживает отладку для двигателей Love2d, Moai и других Lua и может также работать для вашей настройки.

Ответ 6

Если вы используете Windows и VS - можете ли вы использовать трюк, который мы используем?

Скопируйте код lua в файл. Затем в коде lua вызовите отладчик api (в С++ это DebuggerBreak(), я думаю - см. здесь). тогда, когда код lua выполнит отладчик, он запустится, и вы сможете указать файл. Затем отлаживайте как обычно?