затмить шаги GDB к предыдущей строке с флагом -O2 - PullRequest
1 голос
/ 30 марта 2011

Шаг за шагом переходите к предыдущей строке, используя gdb с флагами -g и -O2. Удалите флаги -O2, и все работает как положено. Кто-нибудь может объяснить, почему это происходит?

Я новичок в gdb в eclipse CDT и использую его в коде C ++ с "Стандартным средством запуска процесса создания".

Это ожидаемое поведение или есть решение, которое оставляет оптимизацию?

Ответы [ 3 ]

2 голосов
/ 30 марта 2011

Оптимизация может перестроить ваш код иногда неожиданными способами. Отладочная информация в оптимизированном коде будет следовать за этими перестановками.

2 голосов
/ 30 марта 2011

Нет требований, чтобы код выполнялся именно в том порядке, в котором вы его написали, просто результат, "наблюдаемое поведение", такой же, как и в случае.

§1.9:

Минимальные требования к соответствующей реализации:

- Доступ к изменчивым объектам оценивается строго в соответствии с правилами абстрактной машины.
- При завершении программы вседанные, записанные в файлы, должны быть идентичны одному из возможных результатов, которые могло бы привести к выполнению программы в соответствии с абстрактной семантикой.
- Динамика ввода и вывода интерактивных устройств должна происходить таким образом, чтобы вывод запроса былфактически доставлено до того, как программа ожидает ввода.То, что составляет интерактивное устройство, определяется реализацией.

Все вместе они называются наблюдаемым поведением программы.

2 голосов
/ 30 марта 2011

Ожидается. Компилятор может свободно переупорядочивать код на более высоких уровнях оптимизации. На странице руководства даже сказано, что:

"Без какой-либо опции оптимизации Целью компилятора является снижение стоимости компиляции и сделать отладку привести к ожидаемым результатам. "

Эта цель должна упасть на второй план на более высоких уровнях.

...