我正在调试看似内存覆盖的内容,它似乎发生在内存中的同一个地方,但由于程序的起始地址不同,每次我都无法在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。
答案 0 :(得分:2)
如果我可以完全提供另一种方法;
抛出异常后,只需climb up the call stack并找到导致覆盖的代码行。在此刻之前设置断点,您应该能够收集导致异常的步骤。
尝试从特定内存地址向后工作似乎过于困难,并且容易出现各种不可重现的情况。例如,我认为如果有问题的内存是从堆中分配的,那么你的程序的起始地址就不会有所作为。