Как заставить ОС (Windows) выделять одни и те же адреса моей программе для каждого сеанса отладки?

После долгих попыток отладки я обнаружил, что мое приложение, вероятно, записывает неправильное значение по адресу 0x5b81730. Я хотел бы узнать, какая часть моего кода делает это.

Некоторое время назад, когда я использовал Windows XP, это было бы очень легко. Я перезапустил бы мое приложение в отладчике (MS Visual Studio 2005), установил точку останова данных по этому адресу, и отладчик указал бы мой код, вызывающий нарушение.

Теперь, после того, как я переключился на Windows 7, это кажется невозможным (или, по крайней мере, очень сложным). Когда я запускаю свое приложение, я вижу, что каждый раз адреса одного и того же объекта в куче немного отличаются (например, 0x53b71b4 в одном запуске, но 0x55471b4 в другом).

Я слышал, что Windows 7 имеет ASLR, что может быть причиной того, что я вижу эти изменения в адресах.

Итак, что я могу сделать, чтобы продолжить использовать мою технику отладки?

Должен ли я отключить ASLR? (Я верю, что это возможно, но не мог узнать, как это сделать)

Или моя проблема вызвана чем-то другим, а не ASLR?

Или я должен забыть удобство использования точек останова данных и использовать некоторые другие методы?

3

Решение

Если вы используете что-то вроде UB, абсолютно нет никакой гарантии, какой адрес будет. Вы не можете зависеть от того, чтобы быть одинаковым каждый раз.

Однако вы можете попробовать отключить ASLR в настройках компоновщика — одним из атрибутов является «Randomized Base Address».

3

Другие решения

Я бы попробовал использовать Проверка приложения. Это отличный способ отладить проблемы утечки памяти. Это прервет выполнение вашего кода, когда возникнет проблема с повреждением памяти.

1

По вопросам рекламы [email protected]