Трудно обнаружить неопределенное поведение (или ошибка)

Я делаю основное приложение Cinder в Visual Studio. Это поколение частиц (слабо следуя онлайн Привет Синдер руководство. В режиме отладки это всегда работает. Однако в конфигурации релиза он иногда не генерирует никаких частиц.

Мое лучшее предположение, что где-то есть UB, проблема в том, что его действительно трудно обнаружить. Небольшие, казалось бы, несвязанные изменения могут вызвать или отменить это.

Например, изменение в функции draw:

spatial_.speed_ += 0.1f * ci::Vec2f(cos(noise * 15.0f), sin(noise * 15.0f));
//                ^^^^^
//                this value

любое постоянное значение, отличное от 1.0f или отсутствие постоянного значения, не приведет к генерации частиц. Как можно изменить функцию draw влияет на код в функции update (где я генерирую частицы). Я знаю, что они вообще не генерируются, потому что я показываю количество частиц.

Все виды изменений такого рода во всей программе вызывают это (например, изменение констант, изменение типов параметров со значения на ссылку, добавление или удаление строки, которая выводится в console ()).

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

Проблемы, с которыми я сталкиваюсь:

  • Я понятия не имею, где ошибка во всем коде.
  • В режиме отладки все отлично работает
  • Я не могу отладить в режиме выпуска (debugging information for ***.exe cannot be found or does not match. Binary was not build with debug information) и любые точки останова удаляются в GUI с помощью всплывающей подсказки the breakpoint will not be currently hit (no symbols have been loaded for this document)
  • Я не могу отлаживать печатая вывод, потому что добавление кода для отображения вывода заставит программу работать. (Как иронический это?)
  • В режиме выпуска, даже если я заставлю его работать (методом проб и ошибок, добавляя / удаляя строки), если я не идентифицирую проблему, нет ничего, чтобы сказать, что изменение чего-либо еще повредит код снова.

Обновить:

  • CppCheck сообщает о проблемах. Я вручную дважды проверил наличие неинициализированных элементов / переменных.
  • Я пытался изолировать эту вещь. Проблема в том, что ЛЮБАЯ модификация, которую я сделаю, приведет к образованию частиц. Если я изменю какой-либо код в draw функция частиц будет генерироваться. Если я удаляю код для размера частиц, частицы будут генерироваться. Если я удалю код для движения, частицы будут сгенерированы. Если я удаляю код для рисования частиц, частицы будут сгенерированы. Если я удаляю код для начального положения частиц, частицы будут генерироваться, если я удаляю код, который удаляет мертвые частицы, частицы генерируются. Единственное, что я обнаружил, это поддерживает ошибку, если я изменил настройки fps, так что да, я знаю, что установка fps не вызывает проблемы, так что ура.

0

Решение

Задача ещё не решена.

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