课上测试:gdb 调试
张桓溪同学,你好!
看到你基础优秀,我很欣慰。今天我们来深入探讨gdb调试器的核心功能,这对你未来在openEuler系统上的开发工作会很有帮助。优秀的基础意味着我们可以更专注于高级用法和效率提升。
让我们直接进入实战。首先创建测试文件:
// testgdb.c
include <stdio.h>
int calculate(int n) {
int sum = 0;
for(int i = 1; i <= n; i++) {
sum += i;
printf("Adding %d, current sum: %d
", i, sum);
}
return sum;
}
void test_function() {
printf("Entering test_function
");
int result = calculate(5);
printf("Final result: %d
", result);
}
int main() {
printf("Starting program
");
test_function();
printf("Program completed
");
return 0;
}

编译时务必加上-g选项:gcc -g testgdb.c -o testgdb
现在开始gdb调试:gdb ./testgdb

核心命令精要:
help - 查看所有命令帮助,help break查看具体命令用法
run - 启动程序执行
break 10 - 在第10行设置行断点
break calculate - 在函数入口设置断点
tbreak 15 - 设置临时断点(命中一次后自动删除)
break 12 if i == 3 - 条件断点,仅当i等于3时触发
continue - 继续执行到下一个断点
next - 执行下一行代码(不进入函数)
step - 执行下一行代码(进入函数内部)
until 18 - 执行直到第18行
finish - 执行完当前函数并暂停
print sum - 打印变量值
display i - 每次暂停时自动显示变量i的值




调试过程示例:
设置函数断点:break calculate
运行程序:run(会在calculate函数入口暂停)
使用next单步执行观察循环
设置显示:display i display sum
使用continue快速执行循环
在关键位置使用print检查变量状态
对于优秀学员的进阶提示:
结合watchpoint:watch sum 监控变量变化
使用命令自动化:在断点处自动执行命令 break 15 commands print i end
反向调试:record full 然后 reverse-step 进行反向执行
多线程调试:info threads 和 thread 命令
记住,优秀的调试能力不在于记住所有命令,而在于快速定位问题的思维模式。在openEuler环境下,这些技能同样适用,只是需要注意系统特定的库路径和工具链版本。
现在你可以开始实际操作了,相信以你的基础,很快就能掌握这些调试技巧。如果在实践中遇到任何问题,随时可以继续讨论。
 
                    
                
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号