Может ли отладка оптимизированной сборки заставить программу вести себя по-другому?

0

Я работаю над плагином для приложения. Из-за причуды SDK я могу только построить свой плагин как сборку Release.

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

Самое главное, если я отключу оптимизацию, я смогу пройти через это хорошо.

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

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

  • 1
    Отладка изменяет синхронизацию, что может полностью изменить поведение неаккуратного кода (UB). И вам, естественно, следует отлаживать оптимизированный код. Хотя только после того, как вы убедились, что неоптимизированная сборка работает, ее сложнее сделать с оптимизацией. Также да, любое изменение параметров сборки может раскрыть или скрыть ошибки.
Теги:
debugging
visual-studio-2010

1 ответ

1

Ну, есть два вопроса:

  1. Отключение оптимизации скрывает ошибки?
  2. Использует ли отладчик прерывание?

Ответ на оба есть иногда.

Любые изменения в build-options потенциально как скрывают, так и выставляют другой набор ошибок, а также изменяют, как они выражаются.

Dito для изменения среды, в которой работает ваша программа, и "под отладчиком" - совершенно другая среда, чем без.
Это особенно влияет на условия гонки, которые трудно диагностировать с помощью отладчика.
См. Heisenbug.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню