要使用 gdb 调试,必须在gcc / g++ 生成执行文件时,加上 -g 选项,那么在生成的时候,就会在该执行文件中加入一些debug信息。
gcc -g -o test test.c
目录
1、常用调试命令
(1) 进入 / 退出调试模式
(2) 开始调试
2、多进程调试命令
1、跟踪父进程或子进程调试
2、进程间切换
1、常用调试命令
(1) 进入 / 退出调试模式
进入调试模式: gdb 执行文件名。如 gdb test
退出调试模式:ctrl + d 或者 quit 命令
(2) 开始调试
实际开始调试时,涉及到的命令可以参考如下表格:
调试命令 | 含义 |
list / l 行号 | 从某一行开始往下显示,一次显示10行。l 2:表示从第二行开始显示10行的内容。 |
list / l 函数名 | 显示某个函数的源码。l main:显示main函数的全部内容 |
run / r | 运行程序,遇到断点会停下来 |
next / n | 单行执行 |
step / s | 进入函数调用 |
display 变量名 | 跟踪查看一个变量,每次停下来都显示它的值 |
break / b 行号 | 在某一行设置断点 |
info break | 查看断点信息 |
delete breakpoints n | 删除序号为 n 的断点,注意是序号,不是行号(使用info break查看断点序号) |
delete breakpoints | 删除所有断点 |
finish | 执行完当前函数停下来 |
continue | 直接到达下一个断点 |
until 行号 | 直接跳转到指定行。until 5:跳转到第5行 |
2、多进程调试命令
1、跟踪父进程或子进程调试
默认情况下,gdb跟踪的是父进程,如果要查看gdb的跟踪状态,可以输入
show follow-fork-mode # 查看当前 gdb 的跟踪状态
如果要跟踪子进程,可以输入
set follow-fork-mode child # 跟踪子进程
如果要重新跟踪父进程,可以输入
set follow-fork-mode parent # 跟踪父进程
2、进程间切换
gdb 默认只跟踪一个进程,要实现进程间切换,需要让两个进程都在gdb的控制下。输入下面的指令后,一个进程会处于调试状态(follow-fork-mode决定),另一个会暂停
set show detach-on-fork off # 让父子进程都在gdb的控制下
查看当前进程的信息
info inferiors # info 查看当前进程信息
切换到指定进程
inferiors 进程序号 # 上一步可以查到进程序号