Программа вылетает без отладочных символов, работает с ними нормально (без оптимизации или чего-либо в любом случае)
Я столкнулся с очень странным сбоем, и мне было трудно отследить его в моей программе.
Я понятия не имею, где его источник, потому что всякий раз, когда я пытаюсь связать с /debug
флаг для отладки с символами отладки, сбой исчезает!
Кажется, это не зависит от оптимизации (я скомпилировал с /Od
отключить оптимизацию компилятора, и я не использую генерацию кода во время компоновки), а также не зависит от самой отладочной информации (я компилирую с /Zi
). По какой-то причине, когда компоновщик вызывается без /debug
флаг, все ведет себя по-разному.
Что может быть причиной этого?
1 ответ
Оказалось, виновник слияния static const int
поля компоновщиком.
Видимо, если у вас есть несколько static const
поля того же типа и значения, компоновщик объединит их, но только если вы не связываете символы отладки.
Я использовал адреса таких полей, чтобы различать их, и, как оказалось, все они выглядели одинаково для компоновщика и, следовательно, для остальной части кода.
Как я понял это?
Много-много print
заявления (часы) привели меня к пониманию, что выполняется неправильный код, пока я наконец не понял причину.