gdb是Linux中的调试代码的工具
我们都知道要调试一份代码,这份代码的发布模式必须是debug。那你知道在linux中,我们编译代码默认是什么模式吗?答案是release模式。
对test.c文件默认生成的a.out可执行程序调试就知道了。
按q退出调试界面。
那如何更进一步的证明?
我们要先知道一些小知识。
使用readelf -a 可执行程序 | grep -i debug指令,可以看出mybin-g文件中有debug信息,而mybin-r文件没有
mybin-g文件进入调试界面没有(no debugging symbols found)信息显示。
- list / l :显示可执行程序的源码,接着上次的位置往下列,以gdb的格式显示,每次列出10行。
l num(行号):从num行开始显示源代码
l 函数名:列出某个函数的源代码
break | b 行号:在某一行设置断点
b 函数名:在某个函数开头设置断点
info break | info b 查看断点信息
delete breakpoints | d breakpoints:删除所有断点
delete breakpoints n(断点编号) | d n(断点编号):删除序号为n的断点
(注意:断点编号是累计的,退出gdb清空所有断点)
disable n(断点编号):禁用断点
enable n:启用断点
run | r:运行程序(类似于VS的F5),遇到断点停止
没有断点
有断点next | n:单条执行(类似VS的f10)
step | s:进入函数调用(类似VS的f11)
finish:执行到当前函数返回,然后停下来等待命令
until X行号:跳至X行
p 变量名:打印变量值
set var 变量名 = val:修改变量的值为val
display 变量名:跟踪查看一个变量,每次停下来都显示它的值
undisplay 变量名:取消对先前设置的那些变量的跟踪
breaktrace | bt:查看各级函数调用及参数
info (i)locals:查看当前栈帧局部变量的值
continue | c:从当前位置开始连续而非单步指向程序(从当前断点到下一个断点)
以上就是我对于Linux中gdb使用的总结。感谢支持!!!