目录
一. 前情提要
二. 相关命令
2.1 l 行号/函数名
2.2 r
2.3 b
2.4 info break
2.5 d
2.6 disable/enable
2.7 n
2.8 s
2.9 p
2.10 display/undisplay
2.11 c
2.12 bt
2.13 finish
2.14 untill
2.15 set var
三. 总结
一. 前情提要
Linux gcc/g++出来的二进制程序,默认是release模式要使用gdb调试,必须在源代码生成二进制程序的时候, 加上 -g 选项
二. 相关命令
2.1 l 行号/函数名
list/l 行号:显示binFile源代码,接着上次的位置往下列,每次列10行。
list/l 函数名:列出某个函数的源代码。

因为在gdb里回车能自动记录最近一条指令,想看完整代码接下来不断回车即可~
2.2 r
r或run:运行程序。

2.3 b
break(b) 行号:在某一行设置断点
break 函数名:在某个函数开头设置断点

2.4 info break
info break :查看断点信息。

2.5 d
delete breakpoints:删除所有断点
delete breakpoints n:删除序号为n的断点

2.6 disable/enable
disable breakpoints:禁用断点
enable breakpoints:启用断点

2.7 n
n 或 next:单条执行(把每一行当作一个整体,包括函数)

2.8 s
s或step:进入函数调用

2.9 p
p 变量:打印变量内容或地址

2.10 display/undisplay
display 变量名:跟踪查看一个变量,每次停下来都显示它的值
undisplay:取消对先前设置的那些变量的跟踪


2.11 c
continue(或c):从一个断点运行到另一个断点

2.12 bt
breaktrace(或bt):查看各级函数调用及参数

2.13 finish
finish:执行到当前函数返回,然后挺下来等待命令

2.14 untill
until X行号:跳至X行(可用来跳出循环等等)

2.15 set var
set var:修改变量的值
这个比较少用,一般用来该变判断的反面来测试程序是否能运行下去,就不用跑到源代码改完再回来测了。
三. 总结
其实这些指令并不是重点,重点是我们需要学会有调试的思维,通过这些指令来帮我们找出问题,划定范围,然后不断缩小范围,最后找到问题。这个过程才是最重要的~