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

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

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

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

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

1 ответ

Оказалось, виновник слияния static const int поля компоновщиком.

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

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

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

Другие вопросы по тегам