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