Visual Studio:在内存ACCESS设置数据断点(即数据为READ时)

Mil*_*ila 6 breakpoints visual-studio-2010

我真的需要弄清楚我的Fortran项目何时读取向量的元素.我每天都使用数据断点,但是当我的代码访问(即读取)内存地址时,我找不到设置数据断点的方法,而我总是将其设置为在修改地址时断开.有没有办法在Visual Studio 2010上执行此操作?(我使用intel visual fortran撰写XE 2011作为编译器).或者更新到更新的视觉工作室?就像一个注释,我在这里看到gdb这样做我可以在GDB中的'内存访问'上设置一个断点吗? 谢谢.

Ps:我从GDB发送电子邮件,他们说不可能用它来做.请看下面的答案:

您好,目前创建的观察点类型是硬编码为"写入".这是因为Visual Studio不支持其他类型的观察点(在GUI和基础结构中).也许有可能在GDB控制台中启用读取观察点,但是它也需要一个黑客,因为控制台实际上"通过"Visual Studio工作(它不直接将命令传递给GDB).我也不确定这个功能是否真的适用于GDB.GDB有很多命令,它们的目标范围非常有限,例如它们只适用于单线程程序,或者仅适用于Linux而不适用于使用gdbserver等.读取观察点看起来像是一种非常依赖于平台的机制.请检查您的平台GDB是否支持读取观察点.如果此功能对您至关重要,请告诉我们.

最好的祝福

小智 1

一些解决方法(使用 WinDBG除外):

  1. 如果它是关于浮点元素,则注入 NaN值。并启用NaN 操作的捕获。这不会捕获读取,而是捕获该值的第一次算术运算。因此,元素的复制将被错过,但尝试执行操作将抛出 FP 异常,暴露其发生的位置。

  2. 取消内存页与该值的映射。它非常不精确,并且会对访问该值周围的 4Kb 数据做出反应......但它仍然可能适用于某些情况。检查 Windows 的MapUserPhysicalPages()和Linux 的munmap()的说明。