以编程方式访问 gdb 中观察点的旧值和新值

sfi*_*ink 5 gdb rr

我真正在做的是尝试在设置或清除单个位时设置观察点。我通过在包含该位的字上设置一个观察点,然后使其成为条件*word & mask(用于设置或(~*word) & mask清除)来做到这一点。

问题是同一个字中的一些其他位可能会被修改,并且条件可能已经匹配。如果我有旧值和新值,我可以设置(($old ^ $new) & mask).

我查看了 pythongdb.Breakpoint类,但它似乎也没有收到此信息。

我想我可以发疯并设置一个命令列表,该列表在值*word更改时记录当前值,并将其用作$old. 但有一半时间我使用它,我实际上是通过 rr 使用它,所以我可能会倒退。

Tom*_*mey 4

没有直接的方法可以在 gdb 中获取这些值;多年来,它一直是一个愿望清单错误(以您的具体情况为例......)。信息存储在与断点关联的对象old_val的字段中;struct bpstats但这仅用于打印旧值,不会在其他地方暴露。

一种选择可能是更改 gdb 以通过便利变量或通过 Python 公开此值。

我想我可以疯狂地设置一个命令列表,每当 *word 的值发生变化时记录当前值,并将其用作 $old。但有一半的时间我使用它,我实际上是通过 rr 使用它,所以我可能会倒退。

这似乎是可行的。您的脚本可以检查当前的执行方向。主要困难是记住在创建此观察点时或禁用然后重新启用它后重置保存的值。