Lua 提供了 debug 库用于提供创建我们自定义调试器的功能。Lua 本身并未有内置的调试器,但很多开发者共享了他们的 Lua 调试器代码。

    Lua 中 debug 库包含以下函数:
    Lua 调试(Debug) - 图1

    上表列出了我们常用的调试函数,接下来我们可以看些简单的例子:

    1. function myfunction ()
    2. print(debug.traceback("Stack trace"))
    3. print(debug.getinfo(1))
    4. print("Stack trace end")
    5. return 10
    6. end
    7. myfunction ()
    8. print(debug.getinfo(1))

    执行以上代码输出结果为:

    1. Stack trace
    2. stack traceback:
    3. test2.lua:2: in function 'myfunction'
    4. test2.lua:8: in main chunk
    5. [C]: ?
    6. table: 0054C6C8
    7. Stack trace end

    在以实例中,我们使用到了 debug 库的 traceback 和 getinfo 函数, getinfo 函数用于返回函数信息的表。

    另一个实例
    我们经常需要调试函数的内的局部变量。我们可以使用 getupvalue 函数来设置这些局部变量。实例如下:

    1. function newCounter ()
    2. local n = 0
    3. local k = 0
    4. return function ()
    5. k = n
    6. n = n + 1
    7. return n
    8. end
    9. end
    10. counter = newCounter ()
    11. print(counter())
    12. print(counter())
    13. local i = 1
    14. repeat
    15. name, val = debug.getupvalue(counter, i)
    16. if name then
    17. print ("index", i, name, "=", val)
    18. if(name == "n") then
    19. debug.setupvalue (counter,2,10)
    20. end
    21. i = i + 1
    22. end -- if
    23. until not name
    24. print(counter())

    执行以上代码输出结果为:

    1. 1
    2. 2
    3. index 1 k = 1
    4. index 2 n = 2
    5. 11

    在以上实例中,计数器在每次调用时都会自增1。实例中我们使用了 getupvalue 函数查看局部变量的当前状态。我们可以设置局部变量为新值。实例中,在设置前 n 的值为 2,使用 setupvalue 函数将其设置为 10。现在我们调用函数,执行后输出为 11 而不是 3。

    调试类型

    • 命令行调试

    • 图形界面调试

    命令行调试器有:RemDebug、clidebugger、ctrace、xdbLua、LuaInterface - Debugger、Rldb、ModDebug。
    图形界调试器有:SciTE、Decoda、ZeroBrane Studio、akdebugger、luaedit。


    Lua 调试(Debug) - 图2