一、GDB调试器的使用
1)产生调试信息
编译指定的.c文件或.cpp文件时加入-g选项,使生成的可执行文件中包含调试所需的信息。
如:gcc -g xx.c -o xx
| g++ -g xx.cpp -o xx
2)进入调试状态
gdb xx
(xx是含调试信息的可执行文件)
3)基本调试命令
命令简写 | 命令全拼 | 具体功能 |
b 行号 | 函数名称 | 代码地址 | break | 在指定的行号、函数入口、代码地址处设置断点; |
bt | backtrace | 回溯,通常能帮我们确定问题的具体位置; |
clear <断点行号> | clear | 清除指定行号的断点,清除时GDB有提示信息; |
c | continue | 继续执行被调试的程序,直到下一个断点或程序结束; |
delete <断点编号> | delete | 清除指定编号的断点,清除时GDB没有提示信息;(可同时清除多个断点) |
disable <断点编号> | disable | 使指定编号的断点失效;(可同时设置多个断点) |
enable <断点编号> | enable | 使指定编号的断点恢复作用;(可同时设置多个断点) |
finish | finish | 执行完当前的子函数,然后停下来等待命令; |
h <命令名称> | help | 查看指定命令的具体帮助信息; |
i <subcommands> | info | 查看指定的信息,具体见help i,如:address、breakpoints … |
l | list | 列出源代码,接着上次的位置往下列,每次列10行; |
l <行号> | 列出指定行号附近的源代码; | |
l <函数名> | 列出指定函数附近的源代码; | |
n | next | 执行程序的下一行,遇到函数会直接执行; |
p <变量名称> | 查看并显示指定变量的值; | |
q | quit | 退出GDB调试环境; |
r | run | 开始执行程序,遇到断点后暂停; |
s | step | 单步执行,遇到函数会跳转进入函数体内; |
set <变量> | set | 修改指定变量的值; |
shell <命令> | shell | 运行shell中的指定命令; |
signal <信号名称> | signal | 把指定的信号发送给当前运行调试的程序; |
start | start | 开始执行程序,直到main()第一行语句前面等待命令; |
whatis <变量> | 查看指定变量或表达式的数据类型; |