Программа вылетает без отладочных символов, работает с ними нормально (без оптимизации или чего-либо в любом случае)

Я столкнулся с очень странным сбоем, и мне было трудно отследить его в моей программе.

Я понятия не имею, где его источник, потому что всякий раз, когда я пытаюсь связать с /debug флаг для отладки с символами отладки, сбой исчезает!

Кажется, это не зависит от оптимизации (я скомпилировал с /Od отключить оптимизацию компилятора и я не с использованием генерации кода времени ссылки), а также независимо от самой отладочной информации (я собираю с /Zi). По какой-то причине, когда компоновщик вызывается без /debug флаг, все ведет себя по-разному.

Что может быть причиной этого?

1

Решение

Оказалось, преступник был слияние static const int поля по компоновщику.

Видимо, если у вас есть несколько static const поля того же типа и значения, компоновщик объединит их, но только если вы не связываете символы отладки.

Я использовал адреса таких полей, чтобы различать их, и, как оказалось, все они выглядели одинаково для компоновщика и, следовательно, для остальной части кода.

Как я понял это?
Очень очень много из print заявления (часы) привели меня к пониманию, что выполняется неправильный код, пока я наконец не понял причину.

4

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

Других решений пока нет …

По вопросам рекламы [email protected]