第一版是針對 Lua 5.0 編寫的。雖然對於後續版本來說仍然十分相關,但有些地方還是有差異。
第四版針對 Lua 5.3,可以在 Amazon 和其他書店買到。
購買這本書,您也可以 贊助 Lua 專案。
![]() |
使用 Lua 程式設計 | ![]() |
第三部分。標準函式庫 第 23 章。除錯函式庫 |
除錯函式庫的掛鉤機制允許我們註冊一個函式,當程式執行時,這個函式會在特定事件中被呼叫。有四種類型的事件可以觸發掛鉤:呼叫 事件會在 Lua 每一次呼叫函式時發生;傳回 事件會在函式每次傳回時發生;列 事件會在 Lua 開始執行新的程式碼列時發生;計數 事件會在執行特定數量的指令後發生。Lua 會使用單一引數呼叫掛鉤,這個引數是一個描述產生呼叫的事件的字串:"call"
、"return"
、"line"
或 "count"
。此外,對於列事件,它也會傳遞第二個引數,也就是新的列號。我們可以隨時使用 debug.getinfo
在掛鉤中取得更多資訊。
要註冊掛鉤,我們使用兩個或三個引數呼叫 debug.sethook
:第一個引數是掛鉤函式;第二個引數是一個描述我們想要監控的事件的字串;第三個引數(選用)是一個描述我們想要取得計數事件的頻率的數字。要監控呼叫、傳回和列事件,我們在遮罩字串中加入它們的第一個字母(`c`
、`r`
或 `l`
)。要監控計數事件,我們只要提供一個計數器作為第三個引數。要關閉掛鉤,我們使用沒有引數呼叫 sethook
。
以下程式碼是一個簡單的範例,它安裝了一個原始的追蹤器,會印出直譯器執行的每一個新列的數字
debug.sethook(print, "l")它只會將
print
安裝為掛鉤函式,並指示 Lua 只在列事件中呼叫它。更精細的追蹤器可以使用 getinfo
將目前的檔案名稱加入追蹤中
function trace (event, line) local s = debug.getinfo(2).short_src print(s .. ":" .. line) end debug.sethook(trace, "l")
版權所有 © 2003–2004 Roberto Ierusalimschy。保留所有權利。 | ![]() |