go语言delve go语言的logo动物( 三 )


接下来,go语言delve你需要在你的机器上安装 delve。
下面我们使用的 main.go 文件 。它注册了一个简单的请求处理函数(handler)然后启动了HTTP服务 。
让我们编译并生产二进制文件 。
现在让我们假设,这个服务器出了些问题,但是我们并不是很确定问题的根源 。你可能已经在程序里加了很多辅助信息,但还是无法从这些调试信息中找出线索 。通常在这种情况下,当前进程的快照会非常有用 。我们可以用这个快照深入查看程序的当前状态 。
有几个方式来获取核心文件 。你可能已经熟悉了奔溃转储(crash dumps) 。它们是在一个程序奔溃的时候写入磁盘的核心转储 。Go语言在缺省设置下不会生产奔溃转储 。但是当你把 GOTRACEBACK 环境变量设置成“crash” , 你就可以用 Ctrl+backslash 才触发奔溃转储 。如下图所示:
上面的操作会使程序终止 , 将堆栈跟踪(stack trace)打印出来,并把核心转储文件写入磁盘 。
另外个方法可以从一个运行的程序获得核心转储而不需要终止相应的进程 。gcore 可以生产核心文件而无需使运行中的程序退出 。
根据上面的操作 , 我们获得了转储而没有终止对应的进程 。下一步就是把核心文件加载进delve并开始分析 。
差不多就这些 。delve的常用操作都可以使用 。你可以backtrace,list,查看变量等等 。有些功能不可用因为我们使用的核心转储是一个快照而不是正在运行的进程 。但是程序执行路径和状态全部可以访问 。
delve基础用法及在vscode中的使用delve 是go语言的调试器,delve的目标是为go提供一个简洁、功能齐全的debug工具,delve易于调用和使用 。
为了能够编译delve , 需要安装Go 1.10或更高版本
安装好go后,直接go get即可安装,更多安装教程见:
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中打好断点后,就可以进行远程调试了
golang ide 什么好用第一种:LiteIDE
LiteIDE是一个简单go语言delve的开源IDEgo语言delve,值得注意go语言delve的是,它是GO语言2012年正式版发布的首个IDE,由Qt开发,它看起来类似于Visual Studio等其他编译器 。

推荐阅读