我正在调试似乎是内存覆盖的内容,它似乎发生在内存中的同一位置,但是由于每次我无法可靠地在Visual Studio中设置数据断点时,程序的起始地址都不同。

有没有办法做到这一点?我在使用VS的Windows 8.1上。一位同事认为您可以通过提示,但不确定是什么提示。我尝试使用谷歌搜索,但失败了,因为我不确定要搜索的内容或短语。

我发现的异常是由Application Verifier发现的,我将尝试对代码库中的分配器做一些魔术,以查看是否可以通过这种方式获取更多信息。

这是最新的三个异常(exception),您可以看到它们很接近但不完全相同:

xx_win32_debug.exe中0xf5cdb1cc的第一次机会异常:0xC0000005:访问冲突读取位置0x9dfed000。

xx_win32_debug.exe中0xf625b1cc处的首次机会异常:0xC0000005:访问冲突读取位置0x9eadd000。

xx_win32_debug.exe中0xf5ccb1cc处的第一次机会异常:0xC0000005:访问冲突读取位置0x9ddbd000。

最佳答案

如果我可以完全提供另一种方法;

引发异常后,只需climb up the call stack并查找导致覆盖的代码行。在此刻之前设置一个断点,您应该能够收集导致异常的步骤。

试图从特定的内存地址向后工作似乎太困难了,并且容易出现各种不可复制的情况。例如,我认为如果有问题的内存是从堆中分配的,那么程序的起始地址将不会有什么不同。

关于c++ - 我是否可以每次都强制程序在内存中的同一位置启动?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23810191/

10-11 23:05
查看更多