zoukankan      html  css  js  c++  java
  • 调试lua代码

    lua没有调试器,但是它提供了很强的调试功能(debug 库), 所以其实一些常用的调试功能都能很方便的使用,就像使用一个命令行调试器一样:

    【例子程序】

    -- debug.lua
    gvar1 = 100 function foo() local var2 = 10 function bar() debug.debug() return var2 end bar() end debug.debug() foo()

    【设置断点】

    这个比较麻烦一点,需要修改代码加入一句:

    debug.debug()

    如果你要条件断点,或者计数断点,没问题,直接写代码就是了

    【开始调试】

    直接运行就是:

    lua debug.lua

    进入断点显示:

    [baiyanh@baiyanh-VirtualBox:~/source/arena/lua/PIL/c23-debug.lib]
    $ lua debug.lua
    lua_debug>

    要继续则运行cont(inue):

    lua_debug> cont

    【打印callstack】

    lua_debug> print(debug.traceback())
    stack traceback:
    (debug command):1: in main chunk
    [C]: in function 'debug'
    debug.lua:5: in function 'bar'
    debug.lua:8: in function 'foo'
    debug.lua:12: in main chunk
    [C]: ?

    注意因为断点是调用库函数debug.debug才进入的,stack trace中的前2帧是debug函数引入的,需要注意。

    【查看全局变量】

    lua_debug> print(gvar1)
    100
    lua_debug> for k, v in pairs(_G) do io.write(k) io.write(" ") end
    lua_debug> string xpcall package tostring print os unpack require getfenv setmetatable next assert tonumber io rawequal collectgarbage arg getmetatable bar module rawset foo gvar1 math debug pcall table newproxy type coroutine _G select gcinfo pairs rawget loadstring ipairs _VERSION dofile setfenv load error loadfile 

    【查看局部变量】

    局部变量不能直接访问,需要用debug.getlocal,比如这里访问foo函数的局部变量:

    lua_debug> print(debug.getlocal(4,1))
    var2    10

    这里getlocal的第一个参数为帧数,我们根据debug.traceback返回的数据,知道foo对应第4帧。

    【查看upvalue】

    这里查看函数bar的upvalue,也就是foo里的那个局部变量

    lua_debug> print(debug.getupvalue(debug.getinfo(3,"f").func, 1))
    var2    10

    这应付日常的调试应该已经足够了(除了那些print党:))。

    当然,我们可以把这些复杂的调用事先写成函数放在一个文件里,比如debug,然后可以:

    lua debug debug.lua

    这样就更方便了。

  • 相关阅读:
    tf.get_variable
    tf.Variable
    tf.placeholder
    conda命令详解
    linux查看程序运行时占用的内存
    ubuntu安装openssh-server
    sed命令
    二分查找
    vue简单使用
    斐波那契数列求解
  • 原文地址:https://www.cnblogs.com/baiyanhuang/p/2841398.html
Copyright © 2011-2022 走看看