在多次运行中调试具有相同内存地址位置的程序?
Posted
技术标签:
【中文标题】在多次运行中调试具有相同内存地址位置的程序?【英文标题】:Debug a program with equal memory address locations over multiple runs? 【发布时间】:2015-02-12 03:34:36 【问题描述】:我有一个正在 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】:没有“可能”,地址随机化一直是自 16 位保护模式以来每个操作系统的核心。否则你不能两次运行相同的进程。或者选择重叠虚拟基地址的两个进程。
使用符号名称而不是指针值,这就是调试符号的用途!
【讨论】:
以上是关于在多次运行中调试具有相同内存地址位置的程序?的主要内容,如果未能解决你的问题,请参考以下文章
shmat()为不同的程序返回不同的地址,所有程序都具有相同的共享内存[重复]
在 VS C++ 6.0 中,哪些调试工具可以很好地找到内存泄漏的位置?