ZeroBrane — отладка с помощью NLua и Visual Studio (для macOS)

Есть ли способ отладки скриптов Lua с помощью ZeroBraneStudio, но с загрузкой/инициализацией скриптов через NLua в C# из Visual Studio для macOS или даже Windows (не VS Code)?

Основная причина сделать это — обеспечить совместимость пакета CLR, включенную в NLua, доступную для Lua в ZBS.

Мне не удалось заставить функцию удаленной отладки, найденную в ZBS, работать с NLua. Вызов require("mobdebug").start() в Lua-скрипте запускает точку останова в Visual Studio, когда программа находится в режиме отладки, но никакие точки останова, установленные ZBS, не срабатывают. Нужна ли дополнительная конфигурация?

Пожалуйста и спасибо

-- ОБНОВЛЕНИЕ 1:

Вывод из line печати:

BASEDIR /Users/B1313/Desktop/MyProject/
DELB * 0
SETB Modules/Test.lua 88
SETB Modules/Test.lua 94
LOAD 1272 ScriptCode/Main.lua
--[[

person G.T.D.    schedule 29.04.2019    source источник


Ответы (1)


Вероятно, это вызвано несоответствием между путями, которые получает отладчик, и путями, заданными в IDE (и используемыми при установке точек останова). Вы можете проверить раздел о контрольных точках в FAQ (https://studio.zerobrane.com/doc-faq#why-breakpoints-are-not-triggered), особенно пункты 3 и 4 в списке.

person Paul Kulchenko    schedule 29.04.2019
comment
Согласно ZBS, при выполнении через ZBS source = "@./ScriptCode/Main.lua", согласно VS для Mac, при выполнении VS source = "@/Users/B1313/Desktop/MyProject/ScriptCode/Main.lua". Капитализация файлов вроде правильная, но пути несколько другие. Как мне сделать так, чтобы они были одинаковыми (они кажутся нормализованными в соответствии с документацией)? Я бы предположил, что ZBS что-то делает в отношении установки каталога проекта, из-за которого путь не является полным, верно? - person G.T.D.; 29.04.2019
comment
Правильно, ZBS устанавливает значение basedir для отладчика на основе пути к проекту, установленного в IDE. Вы можете попробовать добавить require('mobdebug').basedir('/Users/B1313/Desktop/MyProject/') перед вызовом .start(). - person Paul Kulchenko; 29.04.2019
comment
Спасибо, Пол! Теперь я продвинулся дальше, но похоже, что есть некоторые несовместимости с LuaSocket и Lua 5.2+, которые использует NLua. В частности, error loading module 'socket.core' ... 'Symbol not found: _luaL_openlib' я сомневаюсь, что есть способ запустить функции отладки ZBS без LuaSocket, верно? Любопытно, были ли какие-либо другие библиотеки совместимости C # - Lua, которые, возможно, вы или другие пробовали для работы с ZBS? - person G.T.D.; 29.04.2019
comment
Это странно, потому что в Lua 5.2 нет openlib. Вы уверены, что загружаете правильную версию luasocket? Вы можете проверить, что package.cpath указывает на библиотеки в ZeroBraneStudio/bin/clibs52, а не clibs (ZBS устанавливает среду за вас, но, поскольку вы работаете вне ее, вам может потребоваться установить правильные библиотеки самостоятельно). - person Paul Kulchenko; 29.04.2019
comment
Хорошо, я исправил это, добавив суффикс версии к ссылке cpath на папку. - Это заставляет интеграцию ZBS работать, своего рода - теперь MobDebug выдает следующую ошибку (в окне вывода), когда поток переходит в ZBS Can't start debugging session due to internal error 'lualibs/mobdebug/mobdebug.lua:1506: bad argument #1 to 'find' (string expected, got nil), и следующую ошибку в VS ...Contents/ZeroBraneStudio/lualibs/mobdebug/mobdebug.lua:809: bad argument #2 to 'sub' (number expected, got nil) при работе в конфигурации отладки. Это ошибка? - person G.T.D.; 29.04.2019
comment
Первая ошибка отображается потому, что процесс приложения был завершен до начала отладки, что произошло из-за второй ошибки. Вторая ошибка странная, так как должна быть получена команда отладчиком. Можете ли вы напечатать значение переменной line перед строкой 809? Это покажет команду, полученную приложением. - person Paul Kulchenko; 29.04.2019
comment
Я получаю следующий вывод, когда печатаю line в 808 (непосредственно перед вызовом string.sub)... BASEDIR /Users/B1313/Desktop/MyProject/\n DELB * 0\n SETB Modules/Test.lua 88\n SETB Modules/Test.lua 94\n LOAD 1272 ScriptCode/Main.lua\n --[[ - person G.T.D.; 29.04.2019
comment
Я обновил исходный пост, чтобы показать более четкий вывод (уценка комментариев не подходит для многострочного вывода). - person G.T.D.; 29.04.2019
comment
Я понял проблему. Я слишком поздно выполнял вызов require("mobdebug").start() в своих сценариях (т. е. после того, как мои модули загрузились и запустились). Я неправильно истолковал указания по удаленной отладке, поставив вызов отладчику для запуска прямо перед первой точкой останова — это неправильно. Его нужно поместить в качестве первого вызова/нескольких строк кода (например, примерно в том же месте, где можно настроить поля пути к пакету) для всей среды сценариев. -- Позже я обновлю OP более подробной информацией. Спасибо, Пол, за вашу помощь (и ZBS)! Я бы никогда не зашел так далеко без него - person G.T.D.; 29.04.2019