5

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

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

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

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

4

1 回答 1

4

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

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

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

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

于 2017-02-17T13:06:18.747 回答