Итак ... какие флаги подходят для отладочной сборки?
Независимо от того, что вам удобно, отладка.
При сборке с -g -O0
отладкапроще всего, но код выполняется очень медленно.
Когда вы строите с -g -O1
, вы начнете наблюдать оптимизацию иногда .Вы попытаетесь войти в функцию и обнаружите, что она встроена и т. Д.
С -g -O2
вы заметите оптимизацию много .Вы получите optimized out
при печати переменных [1], вы неожиданно будете прыгать в коде и т. Д.
С -g -O3
вы увидите те же симптомы, но чаще.
GCC на самом деле не имеет уровней, превышающих -O3
, так что это конец строки.
Люди, которые понимают преобразования, которые GCC выполнил с помощью -O3
, будут иметь небольшие проблемы при отладке этого кода (Вы всегда можете посмотреть на сборку, выяснить, где находится переменная, которую вы хотите на самом деле , и идти оттуда).Но для простых смертных обычно довольно сложно отладить код -O2
.
[1] В настоящее время в GDB и GCC ведется работа по сокращению количества optimized out
экземпляров, но она еще не завершена.