日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

以下文章來源于大愚Talk ,作者大愚Talk

delve 的漢語意思是:鉆研、探索;用這個來命名一個debug工具還是非常的形象。

本文主要介紹該工具的安裝與常用使用方法。是一個step-by-step的文章。目標是幫助大家學會如何使用 delve 來debug自己的代碼。

安裝

官網的安裝文檔地址:
https://github.com/go-delve/delve/tree/master/Documentation/installation

我再重復下如何在 mac 上進行安裝。

首先 xcode-select --install 把依賴的編譯工具鏈安裝一下。

然后通過下面的命令即可完成

$ go get github.com/go-delve/delve/cmd/dlv

這里有個注意點,大家如果使用modules的方式來管理項目,應該知道安裝依賴包也是上面這個命令。所以執行上面的命令時,請確保自己不是在一個go modules的路徑下。

到此,安裝工作就可以完成了,可以在終端執行,可以看到如下畫面:

? /Users/dayu >dlv version
Delve Debugger
Version: 1.4.0
Build: $Id: 67422e6f7148fa1efa0eac1423ab5594b223d93b $

命令介紹

用中文來翻譯下命令的含義。

Usage:
  dlv [command]

Available Commands:
  attach      可以用來對一個正在運行的進行進行調試.
  connect     連接到headless調試器.
  core        用來調試core文件.
  dap         [EXPERIMENTAL] 啟動一個Debug Adaptor Protocol (DAP)的TCP服務器來通信.
  debug       在當前包或者指定的包編譯并debug程序.
  exec        如果你已經編譯好了二進制,可以用該命令啟動調試.
  help        幫助命令.
  test        可以用來測試自己編寫的測試源碼文件.
  trace       編譯并跟蹤程序.

dlv 的命令非常多,主要介紹下 debug 與 attach 的使用。其它命令大家可以嘗試下,不過一般用的也非常少!dlv test 這個也非常有用,不過使用跟debug差不多。

使用

下面將主要介紹這 debug 與 attach 如何使用,這兩個命令其實主要面對兩種使用場景。

  1. 用 Golang 寫了一個命令行程序,想要debug一下;
  2. 寫了一個 Grpc 或者 Http 服務,運行的進行進行debug;

進入調試后,他們的命令非常相似,下面開始我們的 debug 之旅。

Debug Main包程序

先來看直接使用 debug 來調試代碼。調試的代碼樣例:

Go 的 Debug 工具 delve 介紹

 

debug調試代碼

此時在終端進入該文件所在路徑,然后執行

dlv debug

然后會成功進入 delve 提供的debug交互界面,如下圖所示。

Go 的 Debug 工具 delve 介紹

 

debug交互

圖中展示了三個非常常用的命令。來分別解釋下。

  • b main.main

這個命令的全拼是:break main.main 用來設置斷點的。除了這種寫法,常用的還有使用行號來設置斷點 b 9。

  • bp

這個命令是用來查找已經設置的斷點的。

Go 的 Debug 工具 delve 介紹

 

斷點查看

查看已經設置的斷點常常一個目的是用來尋找 clear 可以清除哪一個斷點。

  • c

該命令是讓程序運行起來。遇到設置的斷點會停止。


上面只是非常基礎的三個命令,我們再來繼續往下走。繼續看這張執行示例圖

Go 的 Debug 工具 delve 介紹

 

調試

這張圖中的命令,都是非常常用的調試命令,來一起看看作用

  • restart

這個命令的主要作用就是一輪debug完成了,重新開始下一輪,上一次設置的斷點會依然有效

  • n

這是執行下一步,也就是代碼的下一行。它就是一行一行的往下,不會陷入內部去

  • s

該命令注意與 n 的區別,它是進入某個函數的內部,源碼函數也能夠跟蹤進去,非常有利于我們學習。但是對于 goroutine 執行的函數你是無法進入的。這也很好理解,因為它的執行時機不可知。

  • p

這個是debug過程中非常重要的一個命令,打印變量的值。也是學習 go 語言的一個利器,圖中可以看到一個 channel 初始化之后的內部結構體。這對我們理解源碼非常有幫助。


下面的命令圖中沒有演示,但覺得有必要說一下。

  • so

如果用了 s 陷入到內部函數,可以快速使用該命令跳出來,回到進入點。

  • gr and grs

這兩個命令是用來查看 groutine 的。

他還有非常多的命令。我們可以在使用過程中隨時使用 help 來進行查看。文末我也放了一張所有命令圖的翻譯。

Debug運行的進程

對于運行中的進程,主要說明下如何進入 debug 交互界面,進入后的操作與上面是一樣的。

假如我們有一個 http 的進程在運行,看一下如何進行 debug。示例代碼如下:

func main() {
	http.HandleFunc("/", Hello)

	http.ListenAndServe(":8080", nil)
}

func Hello(w http.ResponseWriter, r *http.Request) {
	a := "test"

	fmt.Println(a)

	time.Sleep(3 * time.Second)

	fmt.Fprint(w, "Hello World")
}

將這個 demo 給運行起來,然后找到他的進程號。執行下面的命令:

dlv attach {pid}

這個 pid 就是當前進程的進程號。

使用該方式要注意:設置完斷點后記得用 c 讓進程處于運行狀態,否則對于 http 或者 grpc 的程序,沒有辦法繼續接受請求,進而無法進入測試。

Go 的 Debug 工具 delve 介紹

 

參考資料

[1] https://github.com/go-delve/delve

分享到:
標簽:Debug
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定