如何使用GDB定位test_linked_list函数中触发return 0的测试用例?
定位测试失败位置的几种方法
给每个失败分支加日志输出
最直接的方式,不用调试器就能快速定位。给每个return 0前加上打印语句,明确标记失败的测试项:if(!insert_end(l,10)) { printf("测试失败:insert_end 插入值10\n"); return 0; }运行程序后,控制台会直接输出失败的测试内容。
用GDB批量设置断点
不用手动逐个找return 0,用GDB的rbreak命令自动匹配函数内所有目标语句:
启动GDB后执行:rbreak test_linked_list:.*return 0;这条命令会给
test_linked_list里所有return 0;语句自动设置断点。接着运行程序,触发的第一个断点就是导致失败的测试位置。写GDB脚本自动化调试
把调试步骤写成脚本,一键完成定位。比如创建find_fail.gdb文件,内容如下:file 你的程序文件名 rbreak test_linked_list:.*return 0; run bt quit然后执行命令:
gdb -x find_fail.gdb程序会自动运行到失败的
return处,打印调用栈,直接看到对应的代码行。用GDB观察点监控返回值
如果return 0是函数唯一的失败返回值,可以监控函数的返回寄存器:
启动GDB后执行:break test_linked_list commands watch $rax # x86_64架构用rax;32位系统替换成eax continue end run当函数准备返回0时,观察点会触发,此时查看当前代码行就能确定失败的测试项。
内容的提问来源于stack exchange,提问作者Icelightz
相关产品推荐
相关产品推荐

