GDB的使用
- 先编译程序:gcc 源文件名 -o 可执行文件名 -g
- 进入gdb调试环境:gdb 可执行文件
- 运行文件:run/r(一次运行完),start(单步运行)
- 单步运行:next/n
- 单步运行(可以进入函数体内部):step/s
- 从函数体中跳出:finish
- 查看代码:list/l,l 文件名:行号/函数名,l 行号/函数名
- 继续向下查看内容:l (因为每次只显示10代码)
- 设置断点:break/b 行号/函数名,b 文件名:行号/函数名
- 设置条件断点:b 行号 if value == number
- 删除断点:delete/d 断点编号
- 获取断点编号:info/i b
- 退出当前循环:u
- 查看变量的值:p 变量名
- 查看变量类型:ptype 变量名
- 设置变量的值:set var 变量名 = 值
- 追踪变量:display 变量
- 取消追踪:undisplay 变量编号
- 退出gdb:quit
- 每次调试停在断点位置:continue/c
GDB调试在进程中的使用
- 打开gdb时,默认调试父进程,或指定set follow-fork-mode parent,此命令在fork调用之前执行。
- 调试子进程时:先start,再set follow-fork-mode child,然后用n继续调试,执行子进程时,父进程直接输出结果。
- 跟踪指定的子进程:先在第n个子进程的入口处用带有if条件语句break语句打断点,然后set follow-fork-mode child