delve基础用法及在vscode中的使用

Python014

delve基础用法及在vscode中的使用,第1张

delve 是go语言的调试器,delve的目标是为go提供一个简洁、功能齐全的debug工具,delve易于调用和使用。

为了能够编译delve,需要安装Go 1.10或更高版本

安装好go后,直接go get即可安装,更多安装教程见: https://github.com/go-delve/delve/tree/master/Documentation/installation

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

安装好后,在终端执行dlv或者dlv help 会看到dlv的帮助信息,则说明安装成功

dlv常用命令

delve的目标是成为一个简洁而强大的工具。但如果你不习惯在编译语言中使用源码调试,则可能令人困惑。本文档将提供开始调试go程序所需的全部信息。

调试例子程序如下

├── go.mod

├── go.sum

├── main.go

├── test

└── utils

├── util.go

└── util_test.go

调试程序主要有三个文件,main.go、util.go、util_test.go,内容如下,比较简单,go包管理工具使用的是go module,模块名为test

在vscode debug 的设置中配置launch.json文件

mode 设置为debug时,program的内容${fileDirname}即可,mode 设置为exec时,program的值为二进制文件的路径,通过设置mode的值,即可调试源码和二进制程序(也需要有源码)。mode模式为auto时,测试了下,vscode 并不能通过program的内容来判断是debug还是exec

远程调试时,需要在远程也有源码、二进制包和dlv工具

在远端执行dlv命令

dlv debug --headless --listen=:8989 --api-version=2 --accept-multiclient #用degbug方式启动远程应用程序

dlv exec --headless --listen=:8989 ./test --api-version=2 --accept-multiclient # exec执行当前目录下的test二进制文件

--listen:指定调试端口

--api-version:指定api版本,默认是1

--accept-multiclient:接受多个client调试

在vscode中线下好源码,和远端的源码结构一致。launch.json配置如下:

在vscode中打好断点后,就可以进行远程调试了

可以去DELVE官网进行下载。

关于delve工具的介绍,这里简单给大家介绍一下。

delve在go项目及应用的开发中可以用来追踪程序中的异常代码,也可以通过打日志的方式追查问题,但是更重要也是非常厉害的一点,就是delve可以直接分析程序执行的情况。这一点在后期或线上的问题排查中无疑是提供了一个非常大的便捷。

Go(又称 Golang)是 Google 的 Robert Griesemer,Rob Pike 及 Ken Thompson 开发的一种静态强类型、编译型语言。

Go 语言语法与 C 相近,但功能上有:内存安全,GC(垃圾回收),结构形态及 CSP-style 并发计算。

Go的语法接近C语言,但对于变量的声明有所不同。Go支持垃圾回收功能。Go的并行模型是以东尼·霍尔的通信顺序进程(CSP)为基础。

采取类似模型的其他语言包括Occam和Limbo,但它也具有Pi运算的特征,比如通道传输。在1.8版本中开放插件(Plugin)的支持,这意味着现在能从Go中动态加载部分函数。

Delve常用命令

命令功能:

dlv attach后面跟 pid,用来Debug编译好的Golang程序。

dlv core用于 coredump。

dlv debug后面跟要调试的 go 文件,进入 Debug。

dlv testDebug test 函数。

问题

Goland和Idea使用debug报错,如下:could not launch process: decoding dwarf section info at offset 0x0: too short。

解决方法

1,更新dlv

2.修改goland或idea配置

更新后的div在$gopath路径下的bin文件夹下。

替换到idea或goland的这个目录下

重启ide,问题解决