Lua 提供了 debug 库用于提供创建我们自定义调试器的功能。Lua 本身并未有内置的调试器,但很多开发者共享了他们的 Lua 调试器代码。
Lua 中 debug 库包含以下函数:
上表列出了我们常用的调试函数,接下来我们可以看些简单的例子:
function myfunction ()print(debug.traceback("Stack trace"))print(debug.getinfo(1))print("Stack trace end")return 10endmyfunction ()print(debug.getinfo(1))
执行以上代码输出结果为:
Stack tracestack traceback:test2.lua:2: in function 'myfunction'test2.lua:8: in main chunk[C]: ?table: 0054C6C8Stack trace end
在以实例中,我们使用到了 debug 库的 traceback 和 getinfo 函数, getinfo 函数用于返回函数信息的表。
另一个实例
我们经常需要调试函数的内的局部变量。我们可以使用 getupvalue 函数来设置这些局部变量。实例如下:
function newCounter ()local n = 0local k = 0return function ()k = nn = n + 1return nendendcounter = newCounter ()print(counter())print(counter())local i = 1repeatname, val = debug.getupvalue(counter, i)if name thenprint ("index", i, name, "=", val)if(name == "n") thendebug.setupvalue (counter,2,10)endi = i + 1end -- ifuntil not nameprint(counter())
执行以上代码输出结果为:
12index 1 k = 1index 2 n = 211
在以上实例中,计数器在每次调用时都会自增1。实例中我们使用了 getupvalue 函数查看局部变量的当前状态。我们可以设置局部变量为新值。实例中,在设置前 n 的值为 2,使用 setupvalue 函数将其设置为 10。现在我们调用函数,执行后输出为 11 而不是 3。
调试类型
命令行调试
图形界面调试
命令行调试器有:RemDebug、clidebugger、ctrace、xdbLua、LuaInterface - Debugger、Rldb、ModDebug。
图形界调试器有:SciTE、Decoda、ZeroBrane Studio、akdebugger、luaedit。

