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

标签 c++ windows visual-studio memory

我正在调试似乎是内存覆盖的内容,并且它似乎发生在内存中的同一位置,但由于每次程序的起始地址都不同,我无法在 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/

相关文章:

C++ - 程序已停止工作

windows - PHP 进程 ram 和 cpu 使用率 (windows)

python - 如何在 Windows 上使用 python 与 AMD GPU 交互

c - 未处理的异常 0xC0000008 : An invalid handle was specified in dynamic recompiler

c++ - 自动引用类型

c++ - 根据空间接近度将具有 xyz 坐标的 3D 点划分为 10 个域

c++ - 我遇到过一些 C++ 代码。为什么我们必须在 block 中使用 *this 而不是 this?

regex - 如何在 Visual Studio 中替换部分匹配的正则表达式字符串

c++ - 使用 fstream 查看空格分隔文件中的下一项(不仅仅是一个字符)的方法

C++:没有用户凭据的Windows每日任务计划