在lldb/gdb中自动统计触发断点B前断点A的命中次数
断点命中次数自动统计方案
核心思路是给两个断点分别绑定自动执行逻辑,全程无需手动交互,仅在断点B首次触发时输出统计结果:
GDB 环境实现
- 先设置断点A、B,查询断点编号,假设A为1,B为2
- 初始化计数变量:
set $a_hit_count = 0 - 为断点A绑定自动执行逻辑,命中后自动计数且不中断:
commands 1 set $a_hit_count = $a_hit_count + 1 continue end - 为断点B绑定自动执行逻辑,首次命中时输出统计结果:
commands 2 printf "断点B首次触发前,断点A总命中次数:%d\n", $a_hit_count # 需停在断点B则无需后续命令,需继续运行可加continue end - 直接运行程序即可,触发B时会自动输出统计值。
LLDB 环境实现
- 假设断点A编号为1,断点B编号为2
- 初始化计数变量:
expr int $a_hit_count = 0 - 为断点A绑定自动执行逻辑:
执行breakpoint command add 1,输入以下内容后按Ctrl+D结束:expr $a_hit_count++ continue - 为断点B绑定自动执行逻辑:
执行breakpoint command add 2,输入以下内容后按Ctrl+D结束:expr printf("断点B首次触发前,断点A总命中次数:%d\n", $a_hit_count) - 运行程序即可自动输出结果。
可视化IDE(如VS Code)环境实现
- 右键点击断点A,选择「编辑断点」,设置触发时自动执行计数逻辑(不同IDE语法略有差异,VS Code可直接执行表达式),同时勾选「命中后不中断继续执行」
- 右键点击断点B,选择「编辑断点」,设置触发时自动打印计数变量值,根据需要选择是否中断
- 启动调试后即可自动完成统计。
提示:如果断点A本身设置了触发过滤条件,直接在原有断点规则上叠加上述计数逻辑即可,无需修改原有生效规则。
内容的提问来源于stack exchange,提问作者A. K.
相关产品推荐
相关产品推荐

