精通GDB:强大的UNIX程序调试工具

需积分: 14 14 下载量 130 浏览量 更新于2024-07-18 收藏 192KB PDF 举报
"GDB中文手册.pdf" GDB(GNU Debugger)是一款强大的开源调试工具,主要应用于UNIX系统,但它也支持多种操作系统。GDB提供了一系列命令行工具,用于调试C、C++等语言编写的程序,它具备启动、控制、检查和修改程序执行的能力。 一、启动与运行程序 GDB允许用户自定义程序启动方式,可以设置参数和环境变量,以满足各种调试需求。你可以使用`run`命令来启动程序,如果希望在启动时传入参数,可以使用`run arg1 arg2 ...`。 二、设置断点与停止点 1. **断点(BreakPoint)**:断点是程序执行过程中暂停的地方。使用`break`命令可以在特定行或函数上设置断点。例如,`break 10`会在第10行设置断点,`break func`则在函数`func`入口处设置断点。 2. **观察点(WatchPoint)**:观察点用于监视特定变量或表达式的值变化。使用`watch expr`命令可以监视表达式`expr`。 3. **捕捉点(CatchPoint)**:捕捉点用于在特定事件(如异常或系统调用)发生时暂停程序。例如,`catch throw`捕获异常抛出,`catch exec`捕获程序执行。 三、程序运行控制 - **暂停/恢复程序**:使用`continue`命令可以继续执行程序直到遇到下一个断点,`step`命令单步执行当前函数内的语句,`next`命令跨过函数调用。 - **信号处理**:GDB可以处理程序收到的信号,如`signal SIGINT`来处理中断信号。 - **线程管理**:GDB支持多线程调试,`thread`命令用于列出、切换和管理线程。 四、查看程序状态 1. **查看栈信息**:`backtrace`或`bt`命令显示调用栈信息,帮助理解程序执行流程。 2. **查看源代码**:`list`命令显示源代码,`list func`显示函数`func`的代码。 3. **搜索源代码**:`find`命令在源代码中搜索文本。 4. **查看内存**:`x`命令查看内存区域,例如`x/10wx 0x1000`显示以10个单词大小的内存块。 五、查看运行时数据 1. **表达式**:`print expr`命令打印表达式的结果。 2. **变量**:直接输入变量名即可查看其值。 3. **数组**:使用`p array[索引]`查看数组元素。 4. **输出格式**:`set format`命令可以设置显示数值的格式。 六、自动显示 `display`命令可以设置自动更新的表达式,每次程序停止时都会显示。 七、设置显示选项 GDB提供了丰富的显示选项,如`set height`, `set width`, `set print array`等,可以根据需要调整输出样式。 八、历史记录与环境变量 GDB维护着命令历史记录,方便重复使用先前的命令。此外,`show environment`可以查看和设置GDB的环境变量。 九、查看寄存器 `info registers`命令用于查看所有寄存器的值,也可以单独查看某个寄存器,如`info reg eax`。 十、改变程序执行 1. **修改变量值**:使用`set variable var = new_value`可以修改变量的值。 2. **跳转执行**:`jump line`命令可以将程序执行跳转到指定行。 3. **产生信号量**:`signal signal_number`发送信号给程序。 4. **强制函数返回**:`finish`命令执行完当前函数并返回,`return`可以强制函数返回特定值。 5. **强制调用函数**:`call function(args)`可以在当前执行上下文中调用函数。 GDB的强大在于其灵活性和深度,通过熟练掌握这些命令和技巧,开发者能够在没有图形界面的情况下进行深入的程序调试。在开发复杂的多线程或低级别系统程序时,GDB的功能尤为突出。