gdb在断点处打印旧值和新值

时间:2016-06-16 10:12:53

标签: c++ gdb

我正在通过gdb v7.10调试c ++代码。我有一个变量,它在我的程序中的某些地方被破坏了。这个变量在100多个地方使用,但可能被破坏的地方是20。 我已经放了20个断点,但是我希望当这20个断点中的每个断点都被击中时,我会打印旧的和新的值。我知道只有一个断点,我可以做一个要执行的命令列表,但我有20个。

我无法使用手表,因为它会在很多地方碰到我无法正常调试的地方。

3 个答案:

答案 0 :(得分:0)

gbd有一种方法可以在遇到断点时使用commands指令执行某些命令。以下是一个示例用法,它打印出变量的值并自动继续:

 break 403
 commands
 silent
 printf "x is %d\n",x
 cont
 end

有关详细信息,请参阅this

答案 1 :(得分:0)

您可以使用gdb的“反向调试”功能重新回过头来查看更改前的值 - https://www.gnu.org/software/gdb/news/reversible.html

'rr'工具进一步调试反向调试,你也可以调查一下 - http://rr-project.org

答案 2 :(得分:0)

  

我已经放了20个断点

这可能不是调试此问题的最佳方法。您熟悉{{1}} command吗?

如果你的20个地方是修改变量的地方,那么当你想要停止时,在变量上设置一个观察点将会完全停止:当变量改变其值时。

作为奖励,停在观察点会自动打印旧值和新值。