程序发布方式:
1、debug版本:程序会被加入调试信息,以便于进行调试。
2、release版本:不添加任何调试信息,是不可调试
确定一个可执行程序是debug,还是release
[cxq@iZ7xviiy0goapxtblgih6oZ test_gdb]$ gdb mycode
看是否有调试信息
readelf 读取一个可执行程序的二进制构成
[cxq@iZ7xviiy0goapxtblgih6oZ test_gdb]$ readelf -S mycode | grep -i debug
[cxq@iZ7xviiy0goapxtblgih6oZ test_gdb]$
gcc默认编译是release方式发布的,无法直接调试
如果要以debug方式发布,必须携带: -g选项
可以发现有debug信息
一个可执行程序要被gdb调试,必须以debug方式发布,必须加-g
gdb命令
调试:
run/r :运行代码(启动调试)。
next/n:逐过程调试。类似vs的f10
step/s:逐语句调试。类似vs的f11
until 行号:跳转至指定行。
finish」:执行完当前正在调用的函数后停下来(不能是主函数)。
continue/c:运行到下一个断点处。
set var 变量=x:修改变量的值为x。
显示:
list/l n:显示从第n行开始的源代码,每次显示10行,若n未给出则默认从上次的位置往下显示.。
list/l 函数名:显示该函数的源代码。
print/p 变量:打印变量的值。
print/p &变量:打印变量的地址。
print/p 表达式:打印表达式的值,通过表达式可以修改变量的值。
display 变量:将变量加入常显示(每次停下来都显示它的值)。
display &变量:将变量的地址加入常显示。
undisplay 编号:取消指定编号变量的常显示。
bt:查看各级函数调用及参数。
info/i locals:查看当前栈帧当中局部变量的值。
【断点】
1)「break/b n」:在第n行设置断点。
2)「break/b 函数名」:在某函数体内第一行设置断点。
3)「info breakpoint/b」:查看已打断点信息。
4)「delete/d 编号」:删除指定编号的断点。
5)「disable 编号」:禁用指定编号的断点。
6)「enable 编号」:启用指定编号的断点。
退出gdb
quit/q:退出gdb。