在GDB中对观察点的旧值和新值的程序化访问



我真正在做的是试图在设置或清除单个位上设置一个观察点。我这样做是通过在包含位的单词上设置一个观察点,然后在*word & mask上进行条件(用于设置,或(~*word) & mask进行清除。)

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

我看了看Python gdb.Breakpoint类,但似乎也没有收到此信息。

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

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

一个选项可能是通过便利变量或Python更改GDB以暴露此值。

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

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

相关内容

  • 没有找到相关文章

最新更新