作者:小卢
专栏:《Linux》
喜欢的话:世间因为少年的挺身而出,而更加瑰丽。 ——《人民日报》
目录
1.背景
在VS中,有两种模式,一种为debug模式,一种为release模式。
debug为可以调试的版本,release为优化后的版本也就是测试版本了
Linux gcc/g++出来的是二进制文件,默认是release版本。
在VS中,我们可以按F10进入调试
在Linux我们依旧可以调试,要使用gdb调试,必须在源代码生成二进制程序的时候, 加上 -g 选项
2.gdb的使用
2.1如何生成可以调试debug版本的文件:
gdb 要调试的文件名
这里文件gcc生成后默认是release版本,因此是不可以调试的
那如何gcc生成debug版本的文件呢?
-std=c99
2.2如何查看调试信息:
readelf -S mytest
调试信息看不懂怎么办?
readelf -S mytest | grep -i debug
查看代码:
| 0
运行 r
打断点
b 数字(行数)
找断点
infor b
删断点
d 编号
设置空断点
disable breakpoint 编号
开启断点
enable breakpoint 编号
退出 quit
逐过程
n(next)
s逐语句
bt
p 变量相当于监视窗口
常显示 display 变量
取消常显示 undisplay
3.gdb调试指令汇总
ist/l 行号:显示binFile源代码,接着上次的位置往下列,每次列10行。
list/l 函数名:列出某个函数的源代码。
r或run:运行程序。
n 或 next:单条执行。
s或step:进入函数调用
break(b) 行号:在某一行设置断点
break 函数名:在某个函数开头设置断点
info break :查看断点信息。
finish:执行到当前函数返回,然后挺下来等待命令
print(p):打印表达式的值,通过表达式可以修改变量的值或者调用函数
比特科技
p 变量:打印变量值。
set var:修改变量的值
continue(或c):从当前位置开始连续而非单步执行程序
run(或r):从开始连续而非单步执行程序
delete breakpoints:删除所有断点
delete breakpoints n:删除序号为n的断点
disable breakpoints:禁用断点
enable breakpoints:启用断点
info(或i) breakpoints:参看当前设置了哪些断点
display 变量名:跟踪查看一个变量,每次停下来都显示它的值
undisplay:取消对先前设置的那些变量的跟踪
until X行号:跳至X行
breaktrace(或bt):查看各级函数调用及参数
info(i) locals:查看当前栈帧局部变量的值
quit:退出gdb