как автоматически сломать программу lua в строке ошибки

Я использую свой собственный интерпретатор для запуска программы lua и отладки с помощью Zerobrane. Если интерпретатор встречает ошибку, как позволить отладчику прерваться на строке ошибки?


person Mixwind    schedule 10.01.2018    source источник


Ответы (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
person Paul Kulchenko    schedule 16.01.2018