我正在尝试调试我的应用程序中的内存泄漏。泄漏的对象有些难以识别(在销毁堆之前),并且创建了很多类似的对象。如果它在每个 session 中都有相同的地址,它会变得容易得多。因此,我试图在我的可执行文件的链接器属性中使用 /FIXED
和 /DYNAMICBASE:NO
禁用 ASLR。
然而,这似乎并没有达到预期的效果,每次的地址仍然不同。此外,甚至 main
中 argv
的地址在每个 session 中都是不同的。是否需要设置一些额外的参数,或者我是否以某种方式误解了这些标志的用途?
最佳答案
您正在查看数据地址; ASLR 主要用于代码。它决定了 EXE 和 DLL 代码段的加载位置。
您可以覆盖 operator new
来控制内存分配,并使用 VirtualAlloc
和定义的基地址来使分配更具确定性(尽管仍然可能有多线程竞争条件).或者,使用 MSVC 默认堆调试工具通过序列号而不是地址来识别 block 。
关于c++ - MSVC2015 中的固定基地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40211135/