golang調試工具Delve

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


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

安裝Devle

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

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

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

使用Devle調試golang服務

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

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

package main

import (
    "fmt"
    "log"
    "net/http"
    "os"
)

const port  = "8000"

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

    fmt.Println("runing on port: " + port)
    log.Fatal(http.ListenAndServe(":" + port, nil))
}

func hi(w http.ResponseWriter, r *http.Request) {
    hostName, _ := os.Hostname()
    fmt.Fprintf(w, "HostName: %s", hostName)
}

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

  使用Delve運行咱們的main.goide

dlv debug ./main.go工具

golang調試工具Delve

能夠輸入help來看一下幫助文檔
golang調試工具Delve

很簡單的一些命令

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

b main.main

golang調試工具Delve

而後運行c 來運行到斷點,
golang調試工具Delve

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

b main.hi
或者使用 "文件:行號"來打斷點

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

golang調試工具Delve

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

curl localhost:8000/hi

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

golang調試工具Delve

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

  • 輸入s 回車,單步執行

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

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

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

golang調試工具Delve

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

  使用Delve附加到運行的golang服務進行調試
  先編譯一下咱們的main.go而後去行main

go build main.go

./main
golang調試工具Delve

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

ps aux|grep main
dlv attach 29260

golang調試工具Delve

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

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

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

curl localhost:8000/hi

golang調試工具Delve

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


轉載自:
1.http://www.javashuo.com/article/p-esetdiou-md.html

相關文章
相關標籤/搜索