我正在通过gdb v7.10调试c ++代码。我有一个变量,它在我的程序中的某些地方被破坏了。这个变量在100多个地方使用,但可能被破坏的地方是20。 我已经放了20个断点,但是我希望当这20个断点中的每个断点都被击中时,我会打印旧的和新的值。我知道只有一个断点,我可以做一个要执行的命令列表,但我有20个。
我无法使用手表,因为它会在很多地方碰到我无法正常调试的地方。
答案 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个地方是修改变量的地方,那么当你想要停止时,在变量上设置一个观察点将会完全停止:当变量改变其值时。
作为奖励,停在观察点会自动打印旧值和新值。