Какой-либо специфический запах кода, который может вызвать ошибки, которые появляются только при использовании «Оптимизация для скорости» в VC ++ 2010?

Обновление: спасибо за ответы! Я сейчас на охоте за условиями гонки. Я обновлю, когда узнаю, в чем виновник, если это окажется чем-то интересным 🙂

Я вижу периодически возникающую ошибку в нашем приложении, которая, кажется, возникает только при включенной оптимизации компилятора. это приложение C ++ / CLI / C # в смешанном режиме, а VS2010 — это компилятор.

В качестве отправной точки, есть ли какие-то особые «плохие практики», которые мне следует искать в коде C ++?

Это не просто отладка против релиза, в обоих случаях это сборка релиза, единственное отличие состоит в том, что для флага оптимизации установлено значение Disabled или For Speed.

В качестве конкретного примера чего-то, в чем я не уверен — возвращение неконстантной ссылки на защищенное поле объекта. Может ли это отключить оптимизатор?

0

Решение

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

3

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

Некоторые причины, по которым вы можете увидеть проблемы:

  • Ваш код имеет неопределенное поведение, то есть не работает.

  • Ваш компилятор сломан.

  • Ваш код не работает, то есть имеет неопределенное поведение.

В debug-vs-release также есть такие вещи, как assert(e)где оценка e имеет важные побочные эффекты, и утверждение не скомпилировано в коде выпуска; но вы говорите, что у вас есть только код выпуска, поэтому я предполагаю, что это не так.

Убедитесь, что вы используете все доступные инструменты отладки, которые вы можете найти; статические анализаторы кода (например, предупреждения компилятора, убсан Кланга), отладчики динамической памяти (Valgrind, asan), средства проверки правильности потоков (Helgrind, tsan) и т. д.

3

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector