Отладка встроенного Lua - PullRequest
       18

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

28 голосов
/ 23 апреля 2009

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

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

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

Ответы [ 6 ]

10 голосов
/ 24 апреля 2009

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

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

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

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

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

6 голосов
/ 09 ноября 2009

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

3 голосов
/ 23 сентября 2012

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

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

3 голосов
/ 23 августа 2011

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

РЕДАКТИРОВАТЬ: извините, мне пришлось закрыть сайт, поэтому программное обеспечение больше не доступно для загрузки. Я мог бы выпустить его как программное обеспечение с открытым исходным кодом позже, если когда-нибудь найду время.

РЕДАКТИРОВАТЬ 2: ссылка обновлена, теперь размещена в github под лицензией MIT (с открытым исходным кодом)

2 голосов
/ 23 апреля 2009

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

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

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

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

0 голосов
/ 23 апреля 2009

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

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

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