006_go debug利器之gdb
众所周知gdb是c/c++下比较常用的debug工具,同样它也可以用于golang的调试.
一、
(1)Golang 官方文档对gdb使用的文档
https://golang.org/doc/gdb?spm=a2c4e.11153940.blogcont199077.8.121f50d5c4E09w
(2)使用
这里-N -l
的标记是忽略编译器优化的意思,这样我们就可以更容易的调试程序。
1 | go build -gcflags "-N -l" main. go #生成二进制文件<br>gdb main #进入调试 |
(3)下面详细解释它的用法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | [root@arun /data/zookeeper/zookeeper-3.4.9/bin/jvmobserver]# ls demo. go main main. go [root@arun /data/zookeeper/zookeeper-3.4.9/bin/jvmobserver]# gdb main. go "/data/zookeeper/zookeeper-3.4.9/bin/jvmobserver/main.go" : not in executable format: File format not recognized (gdb) file main #Use FILE as program to be debugged.指定要debug的文件 Reading symbols from /data/zookeeper/zookeeper-3.4.9/bin/jvmobserver/main...done. Loading Go Runtime support. (gdb) b 243 #在243行处打断点 Breakpoint 1 at 0x4a558f: file /data/zookeeper/zookeeper-3.4.9/bin/jvmobserver/main. go , line 243. (gdb) run #Start debugged program.开始debug程序 Starting program: /data/zookeeper/zookeeper-3.4.9/bin/jvmobserver/main Breakpoint 1, main.main () at /data/zookeeper/zookeeper-3.4.9/bin/jvmobserver/main. go :243 243 mergedata,err := MergeData( "10751" ) (gdb) where #打印当前所在的位置 #0 main.main () at /data/zookeeper/zookeeper-3.4.9/bin/jvmobserver/main.go:243 (gdb) p err #Print value of expression EXP.打印这个表达式 $1 = {tab = 0x10, data = 0x4c3120} (gdb) info files #Names of targets and files being debugged.查看当前正处于debug状态的文件,help info可以看到很多的info子命令 (gdb) s #进入函数内部调试 main.MergeData (pid= "10751" , ~r1= map [string]float64, ~r2=...) at /data/zookeeper/zookeeper-3.4.9/bin/jvmobserver/main. go :140 140 func MergeData(pid string) ( map [string]float64, error) { (gdb) help finish #执行,直到选定的frame执行结束,然后打印返回值,将其放入历史值中,停止 Execute until selected stack frame returns. Usage: finish Upon return , the value returned is printed and put in the value history. |
二、调试带有启动参数的程序
1 2 | gdb jvmmonitor (gdb) set args -C ../conf/conf.yaml |
利用coredump进行线上环境复原参考:https://www.cnblogs.com/chengliangsheng/p/3597010.html
进一步探索: https://blog.csdn.net/huwh_/article/details/77140752
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步