You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 03:52:05