Почему при отладке программы в gdb выполнение идёт скачками?

142
20 октября 2018, 00:20

В gdb ввожу команду next и прыгаю на 100 строку, потом на 97 потом на 100 потом на 97 потом на 100 потом на 103. Не ну понять почему с 97 на 100 можно. На 98 и 99 объявляются новые переменные, но почему скочки по 97 и 100, и таже картина со 102 и 104 я не понимаю. В чём проблема?

Answer 1

Одна C/C++ строка может состоять из нескольких ассемблерных команд. Каждой ассемблерной инструкции (если используется опция -g) приписана ссылка на файл и номер строки. Компилятор в процессе оптимизаций может менять порядок ассемблерных инструкций, в том числе, перемешивая инструкции из разных строчек (и даже файлов, если были инлайны функций). Скорее всего в gdb команда next останавливается, как только начался новый диапазон (файл + строка). Если диапазоны частично перемешены, то создается впечатление скачков по исходникам. Другими словами использование "-g" вместе с "-O2" не дает простого способа привязки текущих инструкций к исходникам. Нормально такая привязка работает только на "-g -O0".

P.S. Кроме команды next есть еще команды nexti/stepi и disas, но это команды уже пошагового исполнения ассемблерных инструкций.

READ ALSO
Ошибка совместимости 16-разрядной программы, с 32-разрядной системой при запуске OpenGL программы

Ошибка совместимости 16-разрядной программы, с 32-разрядной системой при запуске OpenGL программы

При запуске программы на OpenGL у меня вылезла ошибка о несовместимости 16-разрядной программы, с 32-битной системой

159
C++, multimap, дублирование ключей

C++, multimap, дублирование ключей

Подскажите, происходит ли реальное дублирование ключей при вставке значений с одинаковым ключом в std::multimap?

189
Передача параметров сигнала в лямбду

Передача параметров сигнала в лямбду

Имеем в наличии такой коннект

191