我可以强制程序每次都在内存中的相同位置启动吗?

时间:2014-05-22 14:48:35

标签: c++ windows visual-studio memory

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

有办法做到这一点吗?我在使用VS的Windows 8.1上。一位同事认为你可以通过暗示,但不确定它是什么。我尝试使用谷歌搜索,但失败了,因为我不确定要搜索什么或如何表达它。

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

以下是最新的三个例外情况,因为您可以看到它们很接近但不相同:

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

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

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

1 个答案:

答案 0 :(得分:2)

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

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

尝试从特定内存地址向后工作似乎过于困难,并且容易出现各种不可重现的情况。例如,我认为如果有问题的内存是从堆中分配的,那么你的程序的起始地址就不会有所作为。