Latest post of the previous page:
Пробовал (в action и других местах)Не помогает.
Latest post of the previous page:
Пробовал (в action и других местах)А путь к файлу выглядит правильно (debug.getinfo(1,"S").source)? Должен совпадать с путем к файлу открытом в ZBS, иначе точки останова работать не будут. Может там есть ненормализированные части (../)?John Doe wrote:Пробовал (в action и других местах). Не помогает.
require('mobdebug').start()
вызывать из luamacro.lua.paulclinger wrote:> Предварительный итог: точки останова в макросах не работают, если require('mobdebug').start() вызывать из luamacro.lua.
> Однако проблемы нет, если start вызван из _macroinit.lua или даже из произвольного клавиатурного макроса.
Это интересно; спасибо за информацию. А где находятся эти файлы по отношению к друг другу и к project directory?
Code: Select all
if __debug then
local mobdebug = require"mobdebug"
local action = m.action
m.action = function(...) mobdebug.on(); action(...) end
end
@\\?\
Подумалось что вместо опцииpaulclinger wrote:Это интересная идея. Вроде как 'остановить здесь'. Надо подумать как реализовать.Была бы удобна команда соответствующая функции IDE ShiftF9 - Break execution at the next executed line of code
debugger.runonstart
можно будет просто использовать 2 различные команды.Вот именно: хочется избежать этой ошибки, и не пытаться начинать отладку если дебуггер занят.paulclinger wrote:Как избежать в каком смысле? если отладка вызвана из того же процесса, то start() не должен ничего делать. Если вызвана из другого процесса, то IDE не поддерживает одновременную отладку и второй процесс получит это ошибку.Если в IDE уже идёт отладка, то функция start может вернуть true, но вслед за этим moddebug выдаст ошибку о неожиданном завершении сессии (в IDE в этот момент "Refused a request to start a new debugging session as there is one in progress already.") Можно ли этого как-то избежать?
Один из примеров выше.paulclinger wrote:Наверное можно добавить метод, а как его использовать? Можно примеры?Хотелось бы иметь возможность получить текущее состояние отладки:
- сервер запущен/остановлен
- отладка запущена/остановлена (start/done), включена/выключена (on/off)
Ок, сейчас попробую. Но в любом случае пожелание: IDE лучше знает где корень проекта, и легко может его "выкусить".paulclinger wrote:Попробуй путь относительно project directory. Отладчик использует относительные пути.Можно ли подхватить в IDE точки, установленные с помощью setbreakpoint? Мне не удалось её использовать, установленные точки не срабатывают. Файл задаю полным путём, и has_breakpoint возвращает true
Хочу реализовать toggle breakpoint, как в IDE. Да, можно вести параллельный учёт точек, но это не очень правильно, ведь точки могут быть изменены и в IDE/paulclinger wrote:А как ее использовать. Обычно тот кто ставит точки останова, знает где они стоят ;)Функцию has_breakpoint хотелось бы иметь публичной.
Обpaulclinger wrote:Не учитывается, это точно. А что за путь-то такой странный? Мне бы не хотелось добавлять обработку для странных путей. Есть идеи откуда он берется? Обычно этот путь устанавливается или самим Lua интерпретатором, или при загрузке Lua кода, например: loadstring(mycode, '@filename').Разбирая случай, в котором не срабатывают точки останова я обнаружил что в debug.getinfo(1,"S").source путь к файлу содержит префикс @\\?\ Похоже такая возможность не учитывается.
\\?\
можно почитать например здесь.Убрать локализацию только с coroutine.create или с других coroutine.xxx тоже?paulclinger wrote:Алтернативный вариант с переопределением загрузчика макросов выглядит интересно, но может просто убрать локализацию coroutine.create в LuaMacro? Я не думаю что это дает значительный выигрыш в производительности, а все эти сложности отпадут.
Только с coroutine.create.Shmuel wrote:Убрать локализацию только с coroutine.create или с других coroutine.xxx тоже?
Получилось примерно так:paulclinger wrote:Попробуй путь относительно project directory. Отладчик использует относительные пути.Можно ли подхватить в IDE точки, установленные с помощью setbreakpoint? Мне не удалось её использовать, установленные точки не срабатывают. Файл задаю полным путём, и has_breakpoint возвращает true
local name = Editor.FileName:lower():gsub(projectroot,""):gsub("\\","/")