golang調試工具Delve

 

  Devle是一個很是棒的golang 調試工具,支持多種調試方式,直接運行調試,或者attach到一個正在運行中的golang程序,進行調試。git

  線上golang服務出現問題時,Devle是必很多的在線調試工具,若是使用docker,也能夠把Devle打進docker鏡像裏,調試代碼。github

  安裝Devle

  安裝Devle很是簡單,直接運行go  get 便可:golang

go get -u github.com/derekparker/delve/cmd/dlv

  若是你的go版本爲1.5請先設置環境變量GO15VENDOREXPERIMENT=1再運行go get。個人go版本爲1.10,不用設置。web

   使用Devle調試golang服務

  先寫一個簡單的web服務,而後使用Devle來進行調試。docker

  在$GOPATH/src/github.com/mytest 文件夾下建立main.go服務器

 1 package main
 2 
 3 import (
 4     "fmt"
 5     "log"
 6     "net/http"
 7     "os"
 8 )
 9 
10 const port  = "8000"
11 
12 func main() {
13     http.HandleFunc("/hi", hi)
14 
15     fmt.Println("runing on port: " + port)
16     log.Fatal(http.ListenAndServe(":" + port, nil))
17 }
18 
19 func hi(w http.ResponseWriter, r *http.Request) {
20     hostName, _ := os.Hostname()
21     fmt.Fprintf(w, "HostName: %s", hostName)
22 }

  簡單吧,一個運行在8000端口上的web服務,訪問 hi會返回機器的名稱。上面代碼的行號是頗有用的,等會咱們打斷點的時候會用到。curl

    使用Delve運行咱們的main.go工具

dlv debug ./main.go

 

能夠輸入help來看一下幫助文檔ui

 

很簡單的一些命令url

  咱們先打在main方法上打一個斷點:

b main.main

 而後運行c 來運行到斷點,

 

 

 

在func li  裏打一個斷點,咱們能夠使用

b main.hi

或者使用   "文件:行號"來打斷點

b /home/goworkspace/src/github.com/mytest/main.go:20

 

 

  如今執行continue 讓服務跑起來。訪問一下咱們的服務,看hi方法會不會停下來。

curl localhost:8000/hi

  看到了沒,在19號停下來了。

  輸入 n 回車,執行到下一行

  輸入s 回車,單步執行

  輸入 print(別名p)輸出變量信息  

  輸入 args 打印出全部的方法參數信息

  輸入 locals 打印全部的本地變量

 

   其餘的命令我就不在這裏給你們演示了,本身動動手試一下。

  使用Delve附加到運行的golang服務進行調試

   先編譯一下咱們的main.go而後去行main

go build main.go

./main

 

 

  而後使用Delve附加到咱們的項目上,先看一下咱們的項目的pid

ps aux|grep main
dlv attach 29260

 

  在hi方法裏打斷點,而後執行c來等待斷點的執行。

b /home/goworkspace/src/github.com/mytest/main.go:20

  

  訪問咱們的服務器,看一下斷點會不會被執行

curl localhost:8000/hi

 

 

  斷點執行了。而後調試你的代碼吧!

相關文章
相關標籤/搜索