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.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 打印全部的本地变量
其余的命令我就不在这里给你们演示了,本身动动手试一下。
先编译一下咱们的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
断点执行了。而后调试你的代码吧!