После долгого отладки я узнал, что мое приложение, вероятно, пишет неправильное значение для адреса 0x5b81730. Я хотел бы узнать, какая часть моего кода делает это.Как заставить ОС (Windows) выделять одни и те же адреса для моей программы для каждого сеанса отладки?
Некоторое время назад, когда я использовал Windows XP, это было бы очень просто. Я перезапустил приложение в отладчике (MS Visual Studio 2005), установил точку останова данных по этому адресу, и отладчик укажет мой код нарушения.
Теперь, после перехода на Windows 7, это кажется невозможным (или, по крайней мере, очень тяжелым). Когда я запускаю свое приложение, я вижу, что каждый раз адреса одного и того же объекта в куче немного отличаются (например, 0x53b71b4 за один проход, но 0x55471b4 в другом).
Я слышал, что Windows 7 имеет ASLR, что может быть причиной того, что я вижу эти изменения в адресах.
Итак, что можно сделать, чтобы продолжить использование моей техники отладки?
Должен ли я отключить ASLR? (Я считаю, что это возможно, но не удалось выяснить, как это сделать)
Или моя проблема вызвана чем-то другим, а не ASLR?
Или я должен забыть о удобстве использования контрольных точек данных и использовать некоторые другие методы?
Вы попробовали это http://msdn.microsoft.com/en-us/library/f7f5138s(v=vs.80).aspx? – 2013-02-28 14:02:35
Это похоже на ASLR (это правильная аббревиатура?). И вы не должны его превращать, чем жить с ним. В конце концов, это может подскочить, если вы не используете его. –
@ bash.d [править]! Можете ли вы доказать, что отключение ASLR может вызвать проблемы (или «скремблировать вещи»)? Я очень уверен, что это невозможно, и что это хорошая идея, чтобы отключить его при отладке изолированной проблемы. (Разумеется, может быть хорошей идеей по соображениям безопасности, чтобы включить ее для релизов). – us2012