golang調試工具Delve


 

轉自:http://www.cnblogs.com/li-peng/p/8522592.html

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

  線上golang服務出現問題時,Devle是必不少的在線調試工具,如果使用docker,也可以把Devle打進docker鏡像里,調試代碼。

  安裝Devle

  安裝Devle非常簡單,直接運行go  get 即可:

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

  如果你的go版本為1.5請先設置環境變量GO15VENDOREXPERIMENT=1再運行go get。我的go版本為1.10,不用設置。

   使用Devle調試golang服務

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

  在$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會返回機器的名稱。上面代碼的行號是很有用的,等會我們打斷點的時候會用到。

    使用Delve運行我們的main.go

dlv debug ./main.go

 

可以輸入help來看一下幫助文檔

 

很簡單的一些命令

  我們先打在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

 

 

  斷點執行了。然后調試你的代碼吧!

 

=========================================================================================

遠程調試

在服務器上 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+|


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM