Когда я хочу провести отладку программ C или C ++, меня научили использовать -O0 для выключения оптимизации, а -ggdb внедрять символы в исполняемый файл, которые оптимизируются для использования GNU GDB Clang, который я использую (или, вы можете использовать -Deglldb для llvm/clang. -g для общих символов отладки, но это не будет так же хорошо, как -ggdb , по -видимому, ...). Тем не менее, я недавно наткнулся на то, что кто -то сказал, чтобы использовать -og (вместо -O0 ), и это застало меня с самостоятельной. Конечно же, он в Man GCC < /code> !: < /p>
Оптимизировать опыт отладки. -Og включает оптимизации, которые не мешают отладке. Это должен быть уровень оптимизации выбора для стандартного цикла редактирования-компиль-дебуг,
, предлагая разумный уровень оптимизации при сохранении быстрого компиляции и хорошего опыта отладки. < /P>
< /blockquote>
Итак, в чем разница? Вот -O0 Описание из Man GCC :
сократить время компиляции и сделать отладку давать ожидаемые результаты. Это по умолчанию. < /P>
< /blockquote>
четко говорит -og «должен быть уровнем оптимизации выбора для стандартного цикла редактирования compile -debug», хотя.
Это заставляет его звучать как -o0 действительно «без оптимизации», тогда как -og -это «некоторые оптимизации, но только те, которые не взаимосвязаны с дебатом». Это правильно? Итак, что мне следует использовать и почему? (Читайте это внимательно, это совсем не является дубликатом): в чем разница между -O0, -O1 и -G
Мой ответ на отладку>
Подробнее здесь:
https://stackoverflow.com/questions/633 ... -og-option