本地CLI debug
centos上yum -y install dlv就可以了。
dlv exec ./executable_file
dlv debug main.go
list
: 查看当前代码上下文break [name]
:设置断点,当需要设置多个断点时,为了断点可识别可进行自定义命名。进入调试模式后先打断点,b test.go:14,然后执行c(类似于gdb的run)运行到断点处。next|step
:逐行执行代码,区别和gdb类似,next遇到函数调用时不会进入该函数,step则会进入函数,如果需要查看函数的具体执行过程则用step,否则用next,调试过程中一般这两个命令会结合使用,对于用户自定义的函数可能需要进入函数内部查看每步执行情况,对于系统函数则没有必要。stepout
:当使用s命令进入某个函数后又想退出时可用此命令。args
:查看函数参数,调试时可以用此命令查看被调用函数所传入的参数值。locals
:查看所有局部变量,locals var_name
:查看具体某个变量,var_name可以是正则表达式。clear
:清除单个断点;clearall
:清除所有断点。p
: 打印一个局部变量/实际参数
命令 | 描述 |
---|---|
args | 打印函数参数 |
break | 设置一个断点 |
breakpoints | 打印激活的断点信息 |
clear | 删除断点 |
clearall | 删除所有的断点 |
condition | 设置断点条件 |
continue | 运行到断点或程序终止 |
disassemble | 拆解器 |
exit | 退出debugger |
frame | 在不同的框架上执行的命令 |
funcs | 打印函数列表 |
goroutine | 显示或更改当前goroutine |
goroutines | 列出程序的全部goroutines |
help | 打印出帮助信息 |
list | 显示源代码 |
locals | 打印局部变量 |
next | 跳到下一行 |
on | 在遇到断点时执行一个命令 |
评估表达式 | |
regs | 打印CPU寄存器的内容 |
restart | 重启进程 |
set | 更改变量的值 |
source | 执行包含delve命令列表的文件 |
sources | 打印源文件列表 |
stack | 打印堆栈跟踪 |
step | 单步执行程序 |
step-instruction | 单步单个执行cpu指令 |
thread | 切换到指定的线程 |
threads | 打印每一个跟踪线程的信息 |
trace | 设置跟踪点 |
types | 打印类型列表 |
vars | 打印某个包内的(全局)变量 |
作者:hehe_Android
链接:https://www.jianshu.com/p/cc4621d9c0aa
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
远程GUI debug
centos上dlv --listen=:9000 --headless=true --api-version=2 exec ./executable_file --log
注意—log要加,可以打印出日志,方便排查。
然后在GoLand上配置:
MacOS上安装DLV
首先尝试brew install go-delve/delve/delve
有可能会报错说找不到。
另一种手动安装方法:
- $GOPATH/src/github.com/derekparker下git clone https://github.com/derekparker/delve.git
制作钥匙串
1 打开”钥匙串访问”
2 打开菜单 钥匙串访问/证书助理/创建证书…
3 名称: dlv-cert 身份类型: 自签名证书 证书类型: 代码签名 并 选择”让我覆盖这些默认值”
4 单击”继续”, 有效期(天数): 365 这里你可以自己修改, 我改为3650
5 一路继续下去, 直到看到”指定用于该证书的位置” 钥匙串 选择 “系统” 并单击”创建”按钮
6 重启系统之后, 再打开”钥匙串访问”, 选择”系统”, 就会看到创建好的”dlv-cert”证书.
7 右键”dlv-cert”证书, 选择”显示简介”->”信任”->”代码签名” 修改为: 始终信任cd delve
- git fetch origin pull/665/head
- git checkout FETCH_HEAD
- CERT=dlv-cert make install
- 然后就安装好了,可以在$GOPATH/bin下找到dlv可执行文件了。