在多次运行中调试具有相同内存地址位置的程序?

时间:2015-02-12 03:34:36

标签: c++ visual-studio-2010 visual-studio debugging visual-studio-debugging

我有一个程序,我正在Visual Studio 2010中调试。我有一个可重现的错误,在程序中发生,我正在打印一些诊断信息。该错误使程序处于错误状态,因此我必须不断重启程序。每次运行程序时,我的结构的地址都不同。它们中有很多,如果每次运行程序时地址都保持不变,那么调试就会容易得多。

地址看起来几乎相似但不同。例如,一个结构的地址一次为0x003F5540,下一次为0x003E5540,下次为0x00605540和0x004F5540。

每次代码执行完全相同,所以我不知道为什么我会看到略有不同的地址。我关掉了ASLR和DEP。每次运行程序时,我该怎么做才能获得相同的地址?

由于

编辑 - 可能无法禁用堆和堆栈随机化:
1st call to "new" always returns different addresses. How do I get it to return the same address?

1 个答案:

答案 0 :(得分:1)

关于它没有“可能”,自16位保护模式以来,地址随机化一直是每个操作系统的核心。否则,您无法两次运行相同的过程。或两个选择重叠虚拟基地址的进程。

使用符号名称代替指针值,这就是调试符号的用途!