Я использую свой собственный интерпретатор для запуска программы lua и отладки с помощью Zerobrane. Если интерпретатор встречает ошибку, как позволить отладчику прерваться на строке ошибки?
как автоматически сломать программу lua в строке ошибки
Ответы (1)
В Lua нет механизма, позволяющего отлавливать ошибки во время выполнения. В Lua 5.1 был вызов функции debug.traceback
, но она больше не вызывается в Lua 5.2+. Если у вас есть собственная обработка ошибок, вы можете вызвать require("mobdebug").pause()
, который попросит отладчик ZeroBrane Studio остановиться на следующей исполняемой строке Lua, что позволит вам, по крайней мере, увидеть трассировку стека и местоположение ошибки, но это, вероятно, все, что вы можете сделать. Вы также можете попробовать присвоить debug.traceback
функции, которая вызывает pause
, но опять же, это будет работать только в Lua 5.1.
Например, попробуйте запустить следующий скрипт из IDE:
require("mobdebug").start()
debug.traceback = function(...)
print("traceback", ...)
require("mobdebug").pause()
end
a()
print("done") -- it will never get here
Если вы сохраните его в файл on-error.lua
и запустите, вы должны увидеть, что выполнение остановлено в строке 5 (после вызова pause()
) со следующим сообщением:
traceback on-error.lua:6: attempt to call global 'a' (a nil value) 2