gdb - 忽略但计算 lldb/gdb 中的断点命中
问题描述
我有两个断点A
和B
. 而且我想计算在被击中A
之前发生了多少次。B
事情A
发生了很多(> 1000),所以我无法手动继续和迭代。A
之后也可能发生,B
因此我无法运行程序完成以找出命中数。有没有自动的方法来做到这一点?
解决方案
您可以通过 A 处的自动继续断点和断点 B 上的命令轻松完成此操作。在最简单的方法中,A 上的断点如下所示:
break set <HoweverYouSpecifyA> --auto-continue 1 -N BreakpointA
那么 B 上的断点将是:
break set <HoweverYouSpecifyB> -C "break list BreakpointA" -C "break disable BreakpointA" --one-shot
当break list BreakpointA
你击中 B 时,输出将显示 A 的命中计数,这是你想知道的。通过在击中 B 时禁用 A,A 的击中计数将保持在击中 B 时的状态,因此您应该能够在之后的任何时候检查它(直到您重新运行)。
当我像这样分两步做一个小断点时,我喜欢使用命名断点,否则你必须使用第一个断点的 ID,这可以根据设置断点的顺序在运行之间改变。
我还将断点 B 设为一次性,因为您只是使用它来冻结 A 的命中数,因此它只需要被命中一次。如果更方便,您还可以让 B 自动继续,然后在程序退出时读出 A 的命中数。
如果你想变得更漂亮,你可以为 B 使用 Python 回调,并从 A 获取命中数并报告你想要的。这是更多的工作,但更容易控制 Python 的输出格式......
推荐阅读
- java - 是否可以删除两个单独的文本字段中的文本,具体取决于使用一个 MouseListener 单击哪个文本字段?
- java - 在本机反应中显示来自本机模块的png图像
- json - 将有效的 CURL put 命令转换为 Python
- java - 如何使用java编写drop课程方法?
- css - 在 React 和 Material-UI 中,如何让我的 Grid 项目占用 100% 的可用水平空间,而不会换行到下一行?
- excel - 电子表格 | OR-Function 中的优先级队列/组合 ISNA() 和 Cell=0
- node.js - 如何从另一个承诺中访问结果?
- android - xamarin android将图像插入在线数据库并以图像视图显示它来自相同的数据库但不同的设备
- c# - C# System.Data.SqlClient.SqlException 无法将值 NULL 插入列 ERROR FOREIGN KEY
- android - 循环播放多个视频