经过长时间的调试,我发现我的应用程序可能将错误的值写入地址 0x5b81730。我想知道我的代码的哪一部分是这样做的。
前段时间,当我使用 Windows XP 时,这将非常容易。我会在调试器(MS Visual Studio 2005)中重新启动我的应用程序,在该地址设置一个数据断点,然后调试器会指向我有问题的代码。
现在,在我切换到 Windows 7 之后,这似乎是不可能的(或者至少非常困难)。当我运行我的应用程序时,我发现每次堆中同一对象的地址都略有不同(例如,一次运行为 0x53b71b4,而另一次运行为 0x55471b4)。
我听说 Windows 7 有ASLR,这可能是我看到这些地址变化的原因。
那么我该怎么做才能继续使用我的调试技术呢?
我应该关闭 ASLR 吗?(我相信这是可能的,但不知道怎么做)
还是我的问题是由其他原因而不是 ASLR 引起的?
还是我应该忘记使用数据断点的便利,而使用其他一些技术?