从代码中观察内存位置/安装"数据断点"?

Lio*_*ior 4 c++ exception conditional-breakpoint

我们有内存覆盖问题.在某些时候,在我们的程序过程中,内存位置被覆盖并导致程序崩溃.问题仅在发布模式下发生.在调试时,一切都很好.这是一个经典的C/C++ bug,也是一个很难找到的bug.

我想知道是否有办法添加一些"调试代码"来监视这个内存位置,并在更改后调用回调.这基本上是调试器在调试模式下可以做的事情('数据断点'),但我们在发布时需要类似的东西.

Rob*_*ker 10

如果您可以控制变量的位置,那么您可以在专用页面上分配它,并设置页面的权限以允许仅使用VirtualProtect进行读取(在Windows上...不确定Linux).

这样,当有人试图写入时,您将获得访问冲突.使用异常翻译器功能,您可以将其视为回调.

即使您无法直接移动变量(例如,它是类成员),也许您可​​以在变量周围添加足够的填充以确保它位于专用页面上并使用相同的方法.

  • 它将是linux上的mprotect().(我即将张贴同样的东西 - 但你打败了我) (2认同)

Pod*_*Pod 7

您仍然可以为"发布"代码生成调试符号.这仍然可以通过调试器运行,就像在"调试"模式下一样.

我最近做了一些与我们的发布驱动程序类似的东西,以便我们可以通过vtune运行它.对于Microsfot LINK,我添加了-DEBUG标志,对于我添加的Microsoft CC -Zi.一切正常.MSKB链接

您可能会发现此链接很有用.