Я работаю над плагином для приложения. Из-за причуды SDK я могу только построить свой плагин как сборку Release.
Работая над определенной частью моего кода, я обнаружил странное поведение. Когда вы переходите через него в отладчик, я получаю то, что, как представляется, является кучевым повреждением, и нарушает права доступа в функциях SDK, но, похоже, что-то не так с кодом. Код отлично работает за пределами отладчика.
Самое главное, если я отключу оптимизацию, я смогу пройти через это хорошо.
Я знаю, что я не должен отлаживать оптимизированный код, но всегда думал, что это потому, что компилятор делал такие функции, как встроенные функции, разворачивал или удалял избыточные циклы и оптимизировал локальные переменные. Отладчик уменьшил бы видимость того, что происходит, да, но это ничего не сломает.
Это заставляет меня беспокоиться, что отключение оптимизации просто скрывает ошибку. Поэтому мой вопрос заключается в том, следует ли ожидать перехода к оптимизированной сборке, такой как сборка отладки, или я должен ожидать, что отладчик сломает ее?
Ну, есть два вопроса:
Ответ на оба есть иногда.
Любые изменения в build-options потенциально как скрывают, так и выставляют другой набор ошибок, а также изменяют, как они выражаются.
Dito для изменения среды, в которой работает ваша программа, и "под отладчиком" - совершенно другая среда, чем без.
Это особенно влияет на условия гонки, которые трудно диагностировать с помощью отладчика.
См. Heisenbug.