Как отлаживать Lua удаленно? - PullRequest
13 голосов
/ 26 марта 2011

Я ищу лучший способ отладки Lua удаленно (например, из веб-браузера).

Я видел RemDebug , но последнее обновление проекта было сделано в 2006 году.Он работает с Lua 5.0 и 5.1, но Lua 5.2 довольно близок, и я не вижу RemDebug, чтобы получить обновление в ближайшее время.

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

Предложения приветствуются.

Ответы [ 5 ]

12 голосов
/ 14 июня 2012

Я разработал новый отладчик на основе RemDebug ( MobDebug ) с новыми командами, новыми функциями, исправлениями ошибок и интеграцией с IDE.

MobDebug основан на взаимодействии TCP между клиентом(debugee) и сервер (контроллер).Это также относится к RemDebug и большинству других удаленных отладчиков.Возможно, вам удастся запустить поверх чего-то еще (например, WebSockets или HTTP), но вам все еще нужно иметь возможность запускать сопрограммы и отладочную ловушку, чтобы контролировать отлаживаемое приложение.очень просто:

  • У вас есть приложение, которое вы хотите отладить
  • У вас также есть отладчик с контроллером
  • Приложение загружает клиентские компоненты отладчика, который открывает соединение с контроллером
  • Контроллер принимает команды из командной строки или IDE (MobDebug предоставляет оба; он интегрируется с ZeroBraneStudio , а также предоставляет сценарий для его запуска)
  • Когда приложение загружено, отладчик устанавливает ловушку отладки, которая запускается на каждой строке / вызове / возврате.Из этого отладочного хука выполняется отладчик вызова, который затем может выполнять команды от контроллера (например, установить точку останова, вычислить выражение и т. Д.).Когда отправляется следующая исполняемая команда (например, run или step), отладчик возвращается к ловушке, которая затем возвращается к приложению, позволяя ему продолжить.

Возможно, будет подражатьсуществующий интерфейс сокетов (поскольку он использует только connect / send / receive и select / timeout для отмены приложения) и повторно использует большую часть библиотеки.Я до сих пор не знаю, почему вы хотите запустить это в браузере, поскольку вы можете запустить приложение на любом устройстве, уже поддерживающем TCP (у меня есть рабочий прототип, отлаживающий приложение, работающее на мобильном устройстве, с моего рабочего стола).

2 голосов
/ 12 апреля 2011
1 голос
/ 10 апреля 2011

Я не уверен, правильно ли это.Надеюсь, что это поможет:

Источник: http://www.keplerproject.org/remdebug/example.html

Это пример сеанса отладки следующего сценария (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 / basedir C: / development / kepler / step. Приостановлено вфайл C: /development/kepler/test.lua, строка 6 над Приостановлено в файле C: /development/kepler/test.lua строка 7 над Приостановлено в файле C: /development/kepler/test.lua строка 10 над Приостановлено в файле C: /development/kepler/test.lua line 15 setb test.lua 19 run Вы можете изменитьge в окно приложения в любое время, чтобы увидеть его вывод.Вернуться к сеансу отладчика:

Приостановлено в файле C: /development/kepler/test.lua строка 19

Запустить Приостановлено в файле C: / development / kepler /test.lua строка 19 eval tab.foo 2 eval tab.bar 2 exec old_tab = tab nil exec tab = 2 nil eval tab 2 exec tab = old_tab nil eval tab.foo 2 запустить Приостановлено в файле C: / development / kepler / test.lua line 19 eval tab.foo 4 delb test.lua 19 setw tab.foo == 32 Вставленный номер эксп.1 запуск Приостановлено в файле C: /development/kepler/test.lua строка 17 (просмотрите выражение 1: [tab.foo = 32]) eval tab.foo 32 delw 1 run Программа завершена

1 голос
/ 01 апреля 2011

Я не был уверен, нужно ли вам отлаживать lua удаленно или спрашивать об этом через HTTP;Я отвечаю о первом и не знаю, как это сделать через HTTP.

Оба LuaEdit и Decoda позволяют удаленно подключаться к работающемуСкрипт lua (как на другом процессе на той же машине, так и на удаленной машине).

Decoda может творить чудеса и делать это для виртуальной машины lua, не требуя каких-либо изменений в виртуальной машине;с LuaEdit вам нужно создать ВМ особым образом, используя предоставленную DLL или библиотеку.

0 голосов
/ 31 июля 2011

Не знаю, для отладки в веб-браузере (эта идея мне кажется странной, может быть, вы можете подробно рассказать, зачем вам нужен отладчик в веб-браузере?)

Однако для автономного отладчика яНаписал удаленный отладчик с графическим интерфейсом: http://cushy -code.com / grld

Он связывается с отлаживаемой программой через API сокетов, так что любое сетевое соединение подойдет, нет необходимости в HTTP.

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

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