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

如何用GDB批量给函数foo的所有调用者设置断点?

批量给foo的调用者设置GDB断点的方法

示例代码:

void caller1() {if(cond1())return;else foo();}

void caller2() {foo();}

void caller3() {foo();}

void foo(void) {return;}

针对你不想逐个设置调用者断点、且无法直接在foo上断点的需求,以下是两种便捷的GDB命令方案:

方案1:批量在所有调用foo的代码位置设置断点

这个方法会精准定位到每个调用foo的指令行,确保只要执行到调用foo的逻辑就触发断点,适合caller1这种有条件调用的场景:

  1. 先执行GDB命令列出所有调用foo的站点:
maint info callsites foo

执行后会输出类似内容:

Callsite at 0x400511 in function caller1: calls foo
Callsite at 0x40051d in function caller2: calls foo
Callsite at 0x400523 in function caller3: calls foo
  1. 接着用以下命令批量提取这些调用地址并设置断点:
maint info callsites foo | grep "Callsite at" | awk '{print $3}' | xargs -I {} break {}

执行后,每个调用foo的位置都会被设置断点,不管调用者名称是什么,都能批量完成。

方案2:批量给所有调用foo的函数入口设置断点

如果你希望只要进入调用foo的函数就触发断点(不管函数内是否最终执行到foo),可以基于maint info callsites的输出提取函数名,批量设置函数断点:

maint info callsites foo | grep "in function" | awk '{print $4}' | sort -u | xargs -I {} break {}

这里的sort -u是为了去重,避免同一个函数多次调用foo时重复设置断点。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 02:35:29