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

posted @   arun_python  阅读(200)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示