Go以及调试工具dlv安装及使用
Go以及调试工具dlv安装及使用
安装go
wget https://studygolang.com/dl/golang/go1.14.1.linux-amd64.tar.gz tar -C /usr/local -zxvf go1.14.1.linux-amd64.tar.gz mkdir -p /home/go/bin/home/go/pkg /home/go/src #官方建议工作目录为/home/go vi .bash_profile #在最下面添加 export GOROOT=/usr/local/go export GOPATH=/home/go export PATH=$PATH:$GOROOT/bin:$GOPATH/bin export GOPROXY="https://goproxy.io" source .bash_profile
安装Delve
# cd $GOPATH/src/ # git clone https://github.com/derekparker/delve.git # cd delve/cmd/dlv/ # go build # go install
命令介绍
Delve时Go程序的源代码级的调试器。
Delve通过控制进程的执行、评估变量以及提供线程/ goroutine状态、CPU寄存器状态等信息,使你能够与程序进行交互。
使用“--”将标志传递给正在调试的程序,例如: `dlv exec ./hello -- server --config conf/config.toml` Usage: dlv [command] Available Commands: attach 连接到正在运行的进程并开始调试. connect 连接到无头调试服务器. core 检查核心转储. debug 编译并开始调试当前目录下的主包或指定的包. exec 执行预编译的二进制文件,并开始调试会话. help 帮助信息 run 弃用的命令。使用“debug”替代它. test 编译测试二进制文件并开始调试程序. trace 编译并开始跟踪程序. version 打印版本. Flags: --accept-multiclient 允许无头服务器接受多个客户机连接。注意,服务器API不是可重入的,客户端必须协调. --api-version int 无头时选择API版本. (default 1) --backend string 后端选择: default 在macOS上使用lldb,其他地方都是本地的. native 本地后端. lldb 使用lldb-server或debugserver. rr 使用mozilla rr (https://github.com/mozilla/rr). (default "default") 默认使用的是default --build-flags string 生成标志,以传递给编译器. --headless 仅在headless模式下运行调试服务器. --init string 初始化文件,由终端客户端执行. -l, --listen string 调试服务器监听地址. (default "localhost:0") --log 启用调试服务器日志记录. --log-output string 应该产生调试输出的组件的逗号分隔列表,可能的值为: debugger 记录调试器命令 gdbwire 日志连接到gdbserial后端 lldbout 将输出从debugserver/lldb复制到标准输出 debuglineerr 读取.debug_line时日志可恢复错误 rpc 记录所有RPC消息 fncall 日志函数调用协议 minidump 日志minidump加载 使用--log启用日志时,默认为“debugger”. --wd string 用于运行程序的工作目录. (default ".") 使用"dlv [command] --help"获取有关命令的详细信息.
debug和attach使用的多一点
dlv debug
dlv debug test.go -- arg1 arg2
-
b(break) main.main:设置断点,还可以根据行号设置断点 b 9
-
bp:查找已经设置的断点
-
c:该命令是让程序运行起来,遇到设置的断点会停止
-
restart:重新开始下一轮的调试
-
n:下一步,不会陷入内部
-
s:进入某个函数的内部,源码函数也跟踪进去
-
so:如果用s陷入到内部函数,可以快速使用该命令跳出来,回到进入点
-
p [var_name]:打印变量的值
-
gr and grs:这两个命令是用来查看goroutine的
-
help:使用过程中随时通过help查看命令
dlv attach
如果项目正在运行中,想要对正在运行的项目进行调试
1)首先使用"ps aux | grep 编译文件名"来查看运行程序的进程号pid
2)然后就能够使用"dlv attach pid"来连接该运行程序,然后就能使用之前debug中的命令来进行调试了
GoLand + Delve:远程调试
前面的例子有使用Delve启动应用或attach到应用进行调试,但添加断点,运行到下一步,查看变量值等操作都是在终端中,输入delve命令来进行的。这种调试方式也太古老了,效率低下。真实场景下,几乎不会使用这种方式来进行调试。我们还是希望借助IDE进行更高效的调试。 下面就介绍如何在GoLand中配合delve进行调试。包括附加到进程调试和远程调试。其实附加到本地进程和远程调试原理是一样的,待调试的进程是通过delve启动的,delve会启动进程,并立即附加到进程,开启一个debug session。并且启动一个debug server,暴露某个端口,客户端IDE可以通过该端口连接到debug server进行调试。
远程调试Debug优点
- 极大的加快开发速度,减少给在代码中使用大量log来定位错误(开发效率太低)
- 最大程度的使用linux远程服务器环境, 极大的简化本地部署模拟服务器环境
- 可以绕过数据库内网的限制
- 完美的解决一些不支持windows开发的依赖
步骤
-
在服务器上运行delve server,可以是用delve运行go代码,也可以是运行可执行程序,也可以是侵入一个运行中的go程序,一般来说attach一个运行中的go程序比较常见
dlv attach $PID --headless --api-version=2 --log --listen=:1234
这样delve server就起来了,然后 继续下一步就是Goland连接调试
-
直接在Goland中配置Host和Port即可,然后在源代码中选择这个“Go Remote”调试器进行调试
- (二)ADS1.2的安装教程以及使用 调试 (不会 AXD 调试工具)
- mqtt服务器搭建以及mqtt客户端图形调试测试工具安装使用
- xdebug的安装、使用、配置、调试、及工具wincachegrind的使用
- ubuntu上安装ns2以及调试工具
- Go语言环境安装以及windows下编译器goLand的安装及使用
- sql prompt工具安装以及注册使用教程
- elasticsearch实用篇之head工具安装以及使用
- python安装easy_install工具以及使用其安装lxml
- Linux下常用网络故障调试工具介绍之wireshark的安装与使用
- Android下打印调试堆栈方法总结以及strace工具使用
- 如何正确的使用Ubuntu以及安装常用的渗透工具集.
- Vue调试工具vue-devtools的安装和使用方式
- 精准调试-vue调试工具vue-devtools安装及完整使用教程
- 虚拟机下登陆beso_wifi开发板以及安装图形界面gdb调试工具
- KextWizard 的使用方法;以及Kext安装的几种工具下载
- bind的编译安装以及压力测试工具queryperf的使用
- 前段自动化工具gulp安装、使用和调试
- MySQL的安装、配置以及工具的使用
- LINUX下使用elasticsearch-jdbc工具实现MySQL同步到ElasticSearch 以及linux 64位centos系统安装jdk1.8
- GitHub工具安装以及使用创建项目