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

相关文章
相关标签/搜索