深入理解GDB:UNIX下的程序调试利器

需积分: 43 8 下载量 9 浏览量 更新于2024-07-29 收藏 846KB PDF 举报
"gdb完全手册" GDB全称为GNU Debugger,是GNU项目的一部分,是一个功能强大的命令行程序调试工具,尤其在Unix或类Unix系统如Linux中广泛使用。虽然其界面非图形化,但提供了丰富的调试功能,适用于复杂的程序调试场景。 在使用GDB调试程序时,主要有以下几个核心功能: 1. **启动程序**:你可以控制程序的启动方式,比如设置程序参数、以特定模式运行,甚至附加到已经运行的进程。 2. **设置断点**:GDB允许你在代码的特定行或基于条件的表达式上设置断点,程序执行到这些位置时会暂停,便于分析执行流程。 3. **检查程序状态**:当程序暂停后,你可以查看和操作变量的值、堆栈信息、内存内容等,了解程序运行时的状态。 4. **改变执行环境**:在调试过程中,你可以动态修改变量的值,模拟不同的执行条件,以测试不同情况下的程序行为。 以下是一个简单的GDB调试示例,涉及了C语言编写的程序`tst.c`: ```c #include<stdio.h> int func(int n) { int sum = 0, i; for (i = 0; i < n; i++) { sum += i; } return sum; } int main() { int i; long result = 0; for (i = 1; i <= 100; i++) { result += i; } printf("result[1-100]=%ld\n", result); printf("result[1-250]=%d\n", func(250)); } ``` 要使用GDB调试这个程序,首先需要编译生成可执行文件: ```bash gcc -gtst.c -otst ``` 然后启动GDB并加载程序: ```bash gdb tst ``` 在GDB环境中,你可以执行以下操作: - `break 5`:在`func`函数的开头设置断点。 - `run`:启动程序执行。 - `print sum`:查看`sum`变量的当前值。 - `step` / `next`:单步执行代码,`step`进入函数,`next`跳过函数调用。 - `continue`:继续执行直到下一个断点或程序结束。 - `set variable n = 10`:改变局部变量`n`的值。 - `quit`:退出GDB。 通过GDB,你可以深入理解程序的运行逻辑,找出并修复bug,这对于开发和维护复杂软件尤其重要。虽然初学者可能会对命令行界面感到不习惯,但熟练掌握GDB将极大提升调试效率。同时,GDB也支持与图形前端(如DDD或GDBMI)集成,提供图形化的调试体验。