轉自:http://www.cnblogs.com/li-peng/p/8522592.htmlhtml
Devle是一個很是棒的golang 調試工具,支持多種調試方式,直接運行調試,或者attach到一個正在運行中的golang程序,進行調試。git
線上golang服務出現問題時,Devle是必很多的在線調試工具,若是使用docker,也能夠把Devle打進docker鏡像裏,調試代碼。github
安裝Devle很是簡單,直接運行go get 便可:golang
go get -u github.com/derekparker/delve/cmd/dlv
若是你的go版本爲1.5請先設置環境變量GO15VENDOREXPERIMENT=1再運行go get。個人go版本爲1.10,不用設置。web
先寫一個簡單的web服務,而後使用Devle來進行調試。docker
在$GOPATH/src/github.com/mytest 文件夾下建立main.goapi
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會返回機器的名稱。上面代碼的行號是頗有用的,等會咱們打斷點的時候會用到。服務器
使用Delve運行咱們的main.goless
dlv debug ./main.go
能夠輸入help來看一下幫助文檔curl
很簡單的一些命令
咱們先打在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 打印全部的本地變量
其餘的命令我就不在這裏給你們演示了,本身動動手試一下。
先編譯一下咱們的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
斷點執行了。而後調試你的代碼吧!
=========================================================================================
遠程調試
在服務器上 ps x|grep game 查找到gameserver的進程pid
而後服務器命令行輸入:dlv attach $PID --headless --api-version=2 --log --listen=:8181
本機只要輸入:
dlv connect remote_ip:8181
鏈接到服務器上的dlv進程,就能夠在本機遠程調試了。
goland調試=========================================================================================
dlv中止調試能夠用ctrl+|