lua 棧最后調用的函數,用於看調試信息


lua_getinfo

int lua_getinfo (lua_State *L, const char *what, lua_Debug *ar);

返回一個指定的函數或函數調用的信息。

當用於取得一次函數調用的信息時,參數 ar 必須是一個有效的活動的記錄。這條記錄可以是前一次調用lua_getstack 得到的,或是一個鈎子 (參見lua_Hook)得到的參數。

用於獲取一個函數的信息時,可以把這個函數壓入堆棧,然后把 what 字符串以字符 '>' 起頭。(這個情況下,lua_getinfo 從棧頂上彈出函數。)例如,想知道函數f 在哪一行定義的,你可以下下列代碼:

     lua_Debug ar;
     lua_getfield(L, LUA_GLOBALSINDEX, "f");  /* 取到全局變量 'f' */
     lua_getinfo(L, ">S", &ar);
     printf("%d\n", ar.linedefined);

what 字符串中的每個字符都篩選出結構 ar 結構中一些域用於填充,或是把一個值壓入堆棧:

  • 'n': 填充 name 及 namewhat 域;
  • 'S': 填充 source short_srclinedefinedlastlinedefined,以及 what 域;
  • 'l': 填充 currentline 域;
  • 'u': 填充 nups 域;
  • 'f': 把正在運行中指定級別處函數壓入堆棧; (譯注:一般用於獲取函數調用中的信息, 級別是由 ar 中的私有部分來提供。 如果用於獲取靜態函數,那么就直接把指定函數重新壓回堆棧, 但這樣做通常無甚意義。)
  • 'L': 壓一個 table 入棧,這個 table 中的整數索引用於描述函數中哪些行是有效行。 (有效行指有實際代碼的行, 即你可以置入斷點的行。 無效行包括空行和只有注釋的行。)

這個函數出錯會返回 0 (例如,what 中有一個無效選項)。

 

如果你想輸出多個,what字符串可以放幾個上面列舉的參數,例如 lua_getinfo(L, "Sln", &ar);

'l'參數可以看見當前處於第幾行,對查看崩潰很有幫助。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM