在变量值更改上设置断点

dem*_*mas 7 language-agnostic debugging

我只是想知道是否可以在变量值的变化上设置断点(在任何编程语言和工具中)?

例如,我想说:"当变量'a'的值将被改变时,停在任何地方".

我知道有能力设置条件断点并在变量具有某个特定值时停止执行,但我没有听到观察变量的变化.

如果不可能,为什么?

Ste*_*sop 7

根据我的经验,您可以通过"内存断点"或"内存观察点"实现此目的.例如gdb就是这样的:我可以在GDB中的'内存访问'上设置断点吗?

至于我已经写观察点看到,实际上突破时触发a写入,无论新值是否等于旧值.因此,如果"改变"你真的意味着"改变"那么那里的例子就会少一些.可能甚至没有,我不确定,虽然我不认为在技术上难以实现仅限更改的观察点,假设您正在实施写入观察点.

对于某些语言来说,变量a是一个什么样的变量.例如,在C或C++中,当启用优化时,变量可以"提升"到寄存器中,在这种情况下,变量地址上的硬件内存观察点不一定能够捕获每个变化.

堆栈上的变量也存在限制,如果您的函数退出但仍然设置了观察点,那么它可以捕获对相同地址的访问,现在用于不同函数中的不同变量.如果稍后(或递归地)再次调用函数,则它不一定从相同的堆栈位置开始,如果没有,那么您的观察点将无法捕获对不同位置的"相同"变量的访问.

"当特定条件在特定代码行中为真时停止"在我的经验中被称为"条件断点".它通常使用不同的机制 - 调试器很可能会在该行代码中放置断点指令.每次触发调试器时都会检查条件并继续执行(如果它是假的).