日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

调试lua代码

發布時間:2023/12/20 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 调试lua代码 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

lua沒有調試器,但是它提供了很強的調試功能(debug 庫), 所以其實一些常用的調試功能都能很方便的使用,就像使用一個命令行調試器一樣:

【例子程序】

-- debug.lua
gvar1 = 100 function foo()local var2 = 10function bar()debug.debug()return var2endbar() enddebug.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

這樣就更方便了。

?

轉載于:https://www.cnblogs.com/baiyanhuang/archive/2013/01/01/2841398.html

總結

以上是生活随笔為你收集整理的调试lua代码的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。