Go調試利器-delve

大家好,我是小棧君,好久沒更新文章了,確實抱歉!因爲工作變動等原因導致最近拖更嚴重,但是請大家放心,我會一如既往的爲大家帶來自己的原創文章,供大家相互交流和學習,一起成長。今天小棧君帶來的分享是go語言的調試利器DELVE。

關於delve工具的介紹,這裏簡單給大家介紹一下。delve在go項目及應用的開發中可以用來追蹤程序中的異常代碼,也可以通過打日誌的方式追查問題,但是更重要也是非常厲害的一點,就是delve可以直接分析程序執行的情況。這一點在後期或線上的問題排查中無疑是提供了一個非常大的便捷。

我們可以登陸官網上進行查看 – https://github.com/go-delve/delve –
圖片描述
圖片描述
對於delve在官方網站上有比較詳細的說明,而且安裝情況也是非常簡單。我們只需要點擊installation中的windows。
圖片描述
注意:如果在模塊模式下使用Go,則必須在模塊目錄之外執行此命令,否則Delve將作爲依賴項添加到項目中。

另外,如果尚未設置,則必須將%GOPATH%\ bin目錄添加到PATH變量中。
圖片描述
當我們進行下載成功後需要添加到我們的環境變量中,
圖片描述
當然也可以通過%GOPATH%\bin來進行添加即可。所以對於delve的安裝按照官方的文檔進行下去還是非常方便和快捷。進行完安裝後我們就可以開始我們實戰演練部分,對於我們的代碼進行調試。
對於delve的常用命令我們可以通過dlv –-help 來進行了解
圖片描述
PS:踩坑日記:很多小夥伴也有反饋即使我們安裝完delve在goland中也無法使用我們的delve來進行代碼的調試,因爲goland中出現

Version of Go is too old for this version of Delve (minimum supported version 1.13, suppress this error with --check-go-version=false 

要解決這個方法很簡單,我們在gopath中安裝好delve後會生成bin目錄,在bin文件夾中會有dlv.exe
圖片描述
然後我們只需要在goland中進行配置一下即可。
圖片描述
然後添加相應的dlv.path爲你gopath下的dlv.exe路徑,然後重啓即可
圖片描述
實操演練:
這裏我準備了一個簡單的項目進行調試
圖片描述
如圖所示可以看到這個是一個非常簡單的web服務器代碼
圖片描述
然後我們進入到相應dos界面執行dlv debug main.go
圖片描述
我們可以用sources來進行查看源文件。
圖片描述
以下是給大家羅列了一些關於dlv的常用命令。方便大家查看

The following commands are available:
    args ------------------------ 打印函數參數.
    break (alias: b) ------------ 設置斷點.
    breakpoints (alias: bp) ----- 輸出活動斷點的信息.
    call ------------------------ 恢復進程,注入一個函數調用(還在實驗階段!!)
    clear ----------------------- 刪除斷點.
    clearall -------------------- 刪除多個斷點.
    condition (alias: cond) ----- 設置斷點條件.
    config ---------------------- 修改配置參數.
    continue (alias: c) --------- 運行到斷點或程序終止.
    deferred -------------------- 在延遲調用的上下文中執行命令.
    disassemble (alias: disass) - 反彙編程序.
    down ------------------------ 將當前幀向下移動.
    edit (alias: ed) ------------ 在$DELVE_EDITOR或$EDITOR中打開你所在的位置
    exit (alias: quit | q) ------ 退出調試器.
    frame ----------------------- 設置當前幀,或在不同的幀上執行命令.
    funcs ----------------------- 打印函數列表.
    goroutine ------------------- 顯示或更改當前goroutine
    goroutines ------------------ 列舉程序goroutines.
    help (alias: h) ------------- 打印幫助信息.
    list (alias: ls | l) -------- 顯示源代碼.
    locals ---------------------- 打印局部變量.
    next (alias: n) ------------- 轉到下一個源行.
    on -------------------------- 在命中斷點時執行命令.
    print (alias: p) ------------ 計算一個表達式.
    regs ------------------------ 打印CPU寄存器的內容.
    restart (alias: r) ---------- 重啓進程.
    set ------------------------- 更改變量的值.
    source ---------------------- 執行包含delve命令列表的文件
    sources --------------------- 打印源文件列表.
    stack (alias: bt) ----------- 打印堆棧跟蹤信息.
    step (alias: s) ------------- 單步執行程序.
    step-instruction (alias: si)  單步執行一條cpu指令.
    stepout --------------------- 跳出當前函數.
    thread (alias: tr) ---------- 切換到指定的線程.
    threads --------------------- 打印每個跟蹤線程的信息.
    trace (alias: t) ------------ 設置跟蹤點.
    types ----------------------- 打印類型列表
    up -------------------------- 向上移動當前幀.
    vars ------------------------ 打印包變量.
    whatis ---------------------- 打印表達式的類型.

在命令前鍵入help來獲得命令的完整文檔,如help goroutine
接下來就是進行斷點的標註,我們可以使用 b 代碼位置:行數 進行標註。
圖片描述

標註完成後 直接輸入c 可以進行查看源代碼。
圖片描述
使用next 可以進行下一步,進行調試。
圖片描述
圖片描述
當然針對更多的dlv命令還需要小夥伴們下來之後進行多多嘗試纔行。相互學習,共同進步,我是小棧君,我們下期再見!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章