一、GDB介绍
GDB是:UNIX及UNIX-like下的调试工具。或许,各位比较喜欢那种图形界面方式的,像VC、BCB等IDE的调试,但如果你是在 UNIX平台下做软件,你会发现GDB这个调试工具相比于VC、z的优点是具有修复网络断点以及恢复链接等功能,比BCB的图形化调试器有更强大的功能。所谓“尺有所短,寸有所长”就是这个道理。
二、功能
一般来说,GDB主要帮助你完成下面四个方面的功能:
1、启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。
2、可让被调试的程序在你所指定的调置的断点处停住。(断点可以是条件表达式)
3、当程序被停住时,可以检查此时你的程序中所发生的事。
4、你可以改变你的程序,将一个BUG产生的影响修正从而测试其他BUG。
三、使用手册
使用GDB调试程序,有以下两点需要注意:
1. 要使用GDB调试某个程序,该程序编译时必须加上编译选项 -g,否则该程序是不包含调试信息的;
2. GCC编译器支持 -O 和 -g 一起参与编译。
1. GDB调试主要有三种方式:
- 直接调试目标程序:gdb ./hello_server
- 附加进程id:gdb attach pid
- 调试core文件:gdb filename corename
2. 退出GDB
- 可以用命令:q(quit的缩写)或者 Ctr + d 退出GDB。
- 如果GDB attach某个进程,退出GDB之前要用命令 detach 解除附加进程。
3. 常用命令
常用命令通常使用命令缩写即可。
命令名称 | 命令缩写 | 命令说明 |
---|---|---|
run | r | 运行一个待调试的程序 |
continue | c | 让暂停的程序继续运行 |
next | n | 运行到下一行 |
step | s | 单步执行,遇到函数会进入 |
until | u | 运行到指定行停下来 |
finish | fi | 结束当前调用函数,回到上一层调用函数处 |
return | return | 结束当前调用函数并返回指定值,到上一层函数调用处 |
jump | j | 将当前程序执行流跳转到指定行或地址 |
p | 打印变量或寄存器值 | |
backtrace | bt | 查看当前线程的调用堆栈 |
frame | f | 切换到当前调用线程的指定堆栈 |
thread | thread | 切换到指定线程 |
break | b | 添加断点 |
tbreak | tb | 添加临时断点 |
delete | d | 删除断点 |
enable | enable | 启用某个断点 |
disable | disable | 禁用某个断点 |
watch | watch | 监视某一个变量或内存地址的值是否发生变化 |
list | l | 显示源码 |
info | i | 查看断点 / 线程等信息 |
ptype | ptype | 查看变量类型 |
disassemble | dis | 查看汇编代码 |
set args | set args | 设置程序启动命令行参数 |
show args | show args | 查看设置的命令行参数 |
4. 使用示例
1. 使用gdb+程序名直接启动GDB调试
gdb test
2. 使用set args设置启动参数 因为启动参数为多个,所以是args
set args parameter1 parameter2 parameter3 ...
3. 使用b 命令打断点
b avformat_find_stream_info (直接打函数名断点)
b 2440 (打当前文件指定行数断点)
b main (在main函数处设置一个断点)
b命令会自动寻找对应函数名,并且告知你在哪个文件多少行,进行设置断点
4. 使用r 命令运行程序
r (程序将运行至断点处)
运行到第一个断点处 Breakpoint 1
5. 使用c 命令运行至下一个断点处
Breakpoint 2, avformat_find_stream_info
6. 使用s以及n命令进行一步一步执行或执行到下一行
s
n
7. 使用quit退出GDB调试
(若GDB程序处于运行中,使用ctrl+C进行中断)
quit
程序被kill退出,输入y(yes)退出GDB调试!
至此就结束啦。
觉得有用记得点赞 收藏+关注。感谢感谢