Если вы хотите создать что-то отлаживаемое (g++ конкретно, но, возможно, разделяет ответ с gcc), какой лучший уровень -O? Другими словами, при создании цели "отладки", а не цели "выпуска".
Онлайн-документы gcc являются немного отрывочными при сравнении -O0 и -O1 (здесь). Моя интерпретация заключается в том, что -O1 позволяет только одну оптимизацию, которая даже может повлиять на отладку, которая является -fomit-frame-pointer. Но, цитируя документ, он включается только в -O1, "где это не мешает отладке". Правильно ли я это интерпретирую?
Другое сообщение на этом сайте (здесь) говорит о -O2 конкретно, и ответ в основном "он работает, но вы получаете исполнение вне порядка". Который, ИМО, может варьироваться от раздражающего до разрушительного в зависимости от того, как сильно скатываются вещи.