我有一个指向**A
另一个指针 ( ) 的指针 ( *B
)。程序中的某个地方B
正在损坏。但是,在存储之前B
已损坏。并不总是位于相同的地址(并不总是相同)。但是 B 总是被相同的值破坏(总是相同的)。我知道这一点是因为我有一个损坏检测例程,它查看要存储的下一个值,所以我只知道它已经损坏的点。*A
B
&B
B
*A
我想要的(当然)是找出B
损坏的地方。
我已经尝试过一个 gdb 观察点,它会自动在指向 ( )A
的任何点上生成一个观察点,希望能够捕捉到它第一次存储在什么时候,在它不再存储之前,变得损坏,然后重新存储.A
*A
B
*A
*A
*A
watch A
commands
silent
watch *A
commands
silent
if *A == magicalcorruptedvalue
where
end
end
end
但问题是,对于硬件观察点,太多的中间内容被存储在 上*A
,所以我很快就用完了观察点。我没有尝试过软件观察点,因为它们不适用于线程。
在这一点上,我认为唯一的解决方案是返回并更仔细地阅读代码(总是一个不错的选择),构建更多的单元测试,或者创建一个专门的线程来不断扫描所有分配的内存以寻找这个值.
但是,我怀疑我不是第一个遇到这个问题的人。表达这个问题的更一般的方式可能是:当所有简单的技术都失败时,调试缓冲区溢出的技术是什么?
元参数:
在 Linux 上
这是在多线程回调样式的应用程序中。