我正在调试似乎是内存覆盖的内容,并且它似乎发生在内存中的同一位置,但由于每次程序的起始地址都不同,我无法在 Visual Studio 内可靠地设置数据断点。
有办法做到这一点吗?我在 Windows 8.1 上使用 VS。一位同事认为有一个提示您可以通过,但不确定它是什么。我尝试过谷歌搜索,但失败了,因为我不确定要搜索什么或如何表达它。
我捕获的异常是由应用程序验证器发现的,我将尝试对代码库中的分配器进行一些魔法,看看我们是否可以通过这种方式获得更多信息。
以下是最新的三个异常(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/