Как отладить 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 уже (у меня есть рабочий прототип отладки приложения, работающего на мобильном устройстве с моего рабочего стола).

Ответ 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.

Надеюсь, что это поможет.