如何在main函数返回非0值时为exit函数设置GDB断点?
在main返回非0时自动触发exit断点并打印回溯的.gdbinit配置
要实现这个需求,你可以在~/.gdbinit中添加一段gdb命令脚本,让调试器自动在main返回非0值时给exit函数设断点并打印调用回溯。具体配置如下:
# 捕获main返回非0的场景,自动触发exit断点并打印完整回溯 break main commands # 运行到main函数执行完毕,获取返回值 finish # x86_64架构下返回值存在rax寄存器,32位请换成$eax if $rax != 0 break exit commands # 打印完整调用栈回溯(包括局部变量) bt full # 可选:如果想打印回溯后自动退出gdb,取消下面一行注释 # quit end # 继续执行,直到触发exit断点 continue end end
配置说明:
break main:先在main函数入口设置断点,确保能拦截到main的执行流程finish:让程序运行完main函数,此时gdb会获取到main的返回值if $rax != 0:判断main的返回值是否非0(注意架构差异:32位程序用$eax,ARM架构可能用$r0,按需调整)- 当满足条件时,给
exit设断点,并定义断点触发后执行bt full打印完整调用栈 continue:让程序继续运行,直到触发exit断点,此时就会自动打印回溯
保存这个配置后,下次启动gdb调试任意程序时,都会自动生效。如果main返回0,调试器会正常继续;如果返回非0,就会在exit处停下并输出调用回溯。
内容的提问来源于stack exchange,提问作者A. K.
相关产品推荐
相关产品推荐

