本地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 在遇到断点时执行一个命令
print 评估表达式
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上配置:
image.png

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可执行文件了。