點選此處嘗試原文除錯視窗。通過原文的“DEBUG IT”按鈕,你可以編輯程式並重新除錯它。
工作原理
下面這張是描述上面例子的向量圖:
從中可以看出原始程式碼轉換了兩次:第一次godebug插入除錯instrumentation,然後gopherjs將結果編譯成JavaScript。
讓我們看一下instrumentation步驟,以下是godebug插入的呼叫:
- godebug.EnterFunc:讓godebug執行時庫知道我們在進入一個函式。由於“next”不停止內部函式呼叫,執行時庫注意這些呼叫並知道何時跳過這些行。
- godebug.ExitFunc:讓godebug執行時庫知道我們在離開一個函式,main中省略。
- godebug執行時庫:當且僅當使用者用命令或一個斷點告知其時,使程式暫停並等待輸入,暫停時,它會提示使用者輸入並響應任何命令。
- godebug.Declare:記錄變數名和值的對映。該對映通過輸出命令使用。
使用godebug
Step 1.安裝
Step 2.設定斷點
在任何想要斷點的地方新增這個標記:
由於斷點是原始碼的一部分,你可以將自己的邏輯置於他們周圍。假設你正在執行一個表格驅動多情況測試,其中一個測試輸入“weird string”的情況是失敗的,那麼你可以將下面這個斷點放入測試當中:
godebug test將於標記處暫停程式,方便定位。
Step 3.執行程式
使用godebug執行命令:
或者對測試來說 ,執行測試命令:
預設情況下,godebug只會新增除錯instrumentation到package main(為了godebug執行)或者測試下的package(為了godebug測試)。這意味著在預設情況下,你無法進入來自匯入包的函式。當需要的時候,執行下面這個行命令:
最後
godebug仍然還是一款需要打磨的新工具,目前存在的已知限制包括:
- 效能開銷
- 可能會導致讀取衝突,如果你的程式讀取自stdin
- 無法附上一個正在執行的程式
- 開始前必須要知道你索要除錯的包
來自:CSDN
相關閱讀
評論(1)