Как отладить Lua удаленно?
Я ищу лучший способ отладки Lua удаленно (например, из веб-браузера).
Я видел RemDebug, но последнее обновление проекта было выполнено в 2006 году. Оно работает с Lua 5.0 и 5.1, но Lua 5.2 довольно близко, и я не вижу RemDebug для получения обновления в ближайшее время.
Я мог бы установить небольшой встроенный веб-сервер на свой отладочный хост и использовать что-то вроде RemDebug для связи с ним и выполнять удаленную отладку через HTTP.
Предложения приветствуются.
Ответы
Ответ 1
Я разработал новый отладчик на основе RemDebug (MobDebug) с новыми командами, новыми функциями, исправлениями и интеграцией с IDE.
MobDebug основан на взаимодействии TCP между клиентом (debugee) и сервером (контроллером). Это также относится к RemDebug и большинству других удаленных отладчиков. Возможно, вы сможете запускать что-то еще (например, WebSockets или HTTP), но вам все равно нужно иметь возможность запускать сопрограммы и отладку для управления отлаживаемым приложением.
Архитектура процесса отладки довольно проста:
- У вас есть приложение, которое вы хотите отлаживать
- У вас также есть отладчик с контроллером
- Приложение загружает клиентские компоненты отладчика, который открывает соединение с контроллером.
- Контроллер принимает команды из командной строки или IDE (MobDebug предоставляет оба: он интегрируется с ZeroBraneStudio, а также предоставляет возможность запускать сценарий)
- Когда приложение загружается, отладчик устанавливает отладочный крючок, который запускается на каждой строке/вызове/возврате. Из этого отладочного крючка в отладчик выполняется повторный вызов, который затем может выполнять команды от контроллера (например, устанавливать контрольную точку, оценивать выражение и т.д.). Когда следующая исполняемая команда отправляется (например, запуск или шаг), отладчик возвращается к крючку, который затем возвращается обратно в приложение, позволяя ему продолжить.
Возможно, можно имитировать существующий интерфейс сокета (поскольку он используется только при подключении/отправке/приеме и выборе/таймауте, чтобы прервать приложение) и повторное использование большей части библиотеки. Я все еще не уверен, почему вы хотите запустить это в браузере, хотя вы можете запускать приложение на все, что поддерживает TCP уже (у меня есть рабочий прототип отладки приложения, работающего на мобильном устройстве с моего рабочего стола).
Ответ 2
Я нашел Hillin Remote Lua Debugger 1.2.0.218
Ответ 3
Я не был уверен, нужно ли удаленно отлаживать lua или спрашивать об этом через HTTP; Я отвечаю о первом и не знаю, как это сделать через HTTP.
Оба LuaEdit и Decoda позволяют вы можете подключиться удаленно к работающему lua script (как к другому процессу на том же компьютере, и на удаленной машине).
Decoda может делать магию и делать это для виртуальной машины lua без каких-либо изменений в VM; с LuaEdit вам необходимо создать виртуальную машину определенным образом, используя предоставленную DLL или библиотеку.
Ответ 4
Я не уверен, правильно ли это. Надеюсь, что это поможет:
Источник: http://www.keplerproject.org/remdebug/example.html
Это пример сеанса отладки следующего script (test.lua):
1 require"remdebug.engine"
2
3 remdebug.engine.start()
4
5 local tab = {
6 foo = 1,
7 bar = 2
8 }
9
10 print("Start")
11
12 function bar()
13 print("In bar 1")
14 print("In bar 2")
15 end
16
17 for i = 1, 10 do
18 print("Loop")
19 bar()
20 tab.foo = tab.foo * 2
21 end
22
23 print("End")
Сначала запустите контроллер RemDebug:
% lua50 controller.lua
Удаленный отладчик Lua
Запустите программу, которую вы хотите отладить
В этот момент вы можете запустить целевую программу (в другом окне):
% lua50 test.lua
Теперь вернитесь в окно, где вы запустили controller.lua(предполагается, что вы запускаете test.lua внутри C:\development\kepler в системе Windows):
Приостановлено в файле C:/development/kepler/test.lua
Введите "help" для команд
basedir C:/development/kepler/ Новый базовый каталог - C:/development/kepler/ имя_базовой_папки C:/разработка/Kepler/ шаг Приостановлено в файле C:/development/kepler/test.lua строка 6 над Приостановлено в файле C:/development/kepler/test.lua строка 7 над Приостановлено в файле C:/development/kepler/test.lua строка 10 над Приостановлено в файле C:/development/kepler/test.lua строка 15 setb test.lua 19 бег Вы можете в любое время перейти к окну приложения, чтобы увидеть его вывод. Назад к сеансу отладчика:
Приостановлено в файле C:/development/kepler/test.lua строка 19
бежать Приостановлено в файле C:/development/kepler/test.lua строка 19 eval tab.foo 2 eval tab.bar 2 exec old_tab = tab ноль exec tab = 2 ноль вкладка eval 2 exec tab = old_tab ноль eval tab.foo 2 бег Приостановлено в файле C:/development/kepler/test.lua строка 19 eval tab.foo 4 delb test.lua 19 setw tab.foo == 32 Вставные часы exp no. 1 бег Приостановлено в файле C:/development/kepler/test.lua строка 17 (смотреть выражение 1: [tab.foo = 32]) eval tab.foo 32 delw 1 бег Программа завершена
Ответ 5
Не знаю для отладки веб-браузера (идея кажется мне странной, может быть, вы можете объяснить, почему вам нужен отладчик веб-браузера?)
Однако для автономного отладчика я написал удаленный отладчик с графическим интерфейсом: http://cushy-code.com/grld
Он взаимодействует с отлаженной программой с API-интерфейсом сокетов, поэтому любое сетевое соединение будет работать, не нужно HTTP.
Надеюсь, что это поможет.