В gdb ввожу команду next и прыгаю на 100 строку, потом на 97 потом на 100 потом на 97 потом на 100 потом на 103. Не ну понять почему с 97 на 100 можно. На 98 и 99 объявляются новые переменные, но почему скочки по 97 и 100, и таже картина со 102 и 104 я не понимаю. В чём проблема?
Одна C/C++ строка может состоять из нескольких ассемблерных команд. Каждой ассемблерной инструкции (если используется опция -g) приписана ссылка на файл и номер строки. Компилятор в процессе оптимизаций может менять порядок ассемблерных инструкций, в том числе, перемешивая инструкции из разных строчек (и даже файлов, если были инлайны функций). Скорее всего в gdb команда next останавливается, как только начался новый диапазон (файл + строка). Если диапазоны частично перемешены, то создается впечатление скачков по исходникам. Другими словами использование "-g" вместе с "-O2" не дает простого способа привязки текущих инструкций к исходникам. Нормально такая привязка работает только на "-g -O0".
P.S. Кроме команды next есть еще команды nexti/stepi и disas, но это команды уже пошагового исполнения ассемблерных инструкций.
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости