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

如何用GDB快速定位首个返回指定错误码的函数?

定位首个返回ERROR_INTERNAL的底层函数(GDB调试方法)

步骤1:获取ERROR_INTERNAL的实际数值

启动GDB加载目标程序后,执行以下命令获取宏对应的整数:

p ERROR_INTERNAL

如果编译时带了调试信息,GDB会直接返回该宏的具体值(比如$1 = -1)。若未带调试信息,需手动查阅头文件中的宏定义获取数值。

步骤2:设置条件断点拦截错误返回

有两种高效方式拦截返回ERROR_INTERNAL的函数:

方式一:拦截所有返回该错误码的函数返回事件

使用GDB的catch return捕获函数返回动作,再添加条件过滤:

catch return
condition $bpnum $_retval == ERROR_INTERNAL
  • $bpnum是刚创建的catch断点的编号(GDB会自动提示,也可通过info breakpoints查看)
  • $_retval是GDB内置变量,代表当前函数的返回值

方式二:直接匹配源码中返回ERROR_INTERNAL的行

如果代码风格规范,可通过正则匹配所有包含return ERROR_INTERNAL;的行并设断点:

rbreak ^.*return.*ERROR_INTERNAL;$

步骤3:触发错误并定位底层函数

运行程序触发错误场景:

run

当断点命中时,执行以下命令查看调用栈:

bt

此时显示的当前函数就是返回ERROR_INTERNAL的函数,第一个命中的断点对应的函数即为最底层首个返回该错误的函数。若后续上层函数因传递该错误码再次触发断点,可通过调用栈区分层级。

内容的提问来源于stack exchange,提问作者Lewis Chan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 15:35:38