godebug是一個跨平臺的Go程序調試工具,傳統的編譯型語言調試器使用底層系統調用并讀取二進制文件用于調試各類符號。使用起來很麻煩而且很難移植。
godebug使用不同的方法,直接把源碼作為目標程序,在每一行插入調試代碼,然后編譯并運行。結果就是一個全功能的調試器,完全可以移植到不同平臺。事實上,由于有了gopherjs ,你也可以在瀏覽器上進行調試:
點擊此處嘗試原文調試窗口。通過原文的“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
無法附上一個正在運行的進程
開始前必須要知道你索要調試的包
其在GitHub上的地址:github.com/mailgun/godebug
本站文章版權歸原作者及原出處所有 。內容為作者個人觀點, 并不代表本站贊同其觀點和對其真實性負責,本站只提供參考并不構成任何投資及應用建議。本站是一個個人學習交流的平臺,網站上部分文章為轉載,并不用于任何商業目的,我們已經盡可能的對作者和來源進行了通告,但是能力有限或疏忽,造成漏登,請及時聯系我們,我們將根據著作權人的要求,立即更正或者刪除有關內容。本站擁有對此聲明的最終解釋權。