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

 

 

  断点执行了。而后调试你的代码吧!

相关文章
相关标签/搜索