Подтвердить что ты не робот

Как отлаживать в режиме выпуска?

Мне нужно отлаживать проект С++, но поскольку одна зависимость не компилируется в режиме отладки, и я не смог исправить эту проблему до сих пор, я бы хотел попробовать отладить проект в режиме выпуска.

В настоящее время приложение выходит из строя из-за нулевого указателя, но у меня нет кода, вызывающего ошибку. Поскольку точки останова, по-видимому, игнорируются в режиме release, я хотел бы знать, что лучший способ найти ошибку.

4b9b3361

Ответ 1

В VS, щелкните правой кнопкой мыши ваш проект, выберите "Свойства".

  • Нажмите C/С++ node. Установите формат отладочной информации на совместимый с C7 (/Z7) или базу данных программы (/Zi).

  • Разверните компоновщик и нажмите "Общие" node. Установите Включить инкрементное связывание с Нет (/INCREMENTAL: NO).

  • Выберите Отладка node. Установите генерацию информации отладки на Да (/DEBUG).

  • Выберите Оптимизацию node. Установите ссылки на Да (/OPT: REF).

    if/OPT: REF указан, /OPT: ICF включен по умолчанию.

Это разорвано непосредственно из документации Microsoft:

Я делаю это все время и почти никогда не отлаживаю в режиме отладки больше. Как вы знаете, многие ошибки, возникающие в сборке выпуска, могут не возникать в сборке отладки (почти наверняка ошибки, возникающие при вызове UB).

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

Ответ 2

Вы не всегда можете просто изменить настройки проекта и перекомпилировать.
Иногда у вас есть выпущенная версия, которую вы хотите отлаживать, или файл дампа, отправленный клиентом.

При компиляции проекта С++ в версии с оптимизацией отладчик иногда не отображает правильную информацию об объекте.

Локальные переменные обычно являются первыми, и много раз информация об объекте теряется для отладчика.

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

Я предложил способ найти недостающую информацию здесь:

Отладка проектов выпуска на С++ - Поиск информации об потерянных объектах