В 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, но это команды уже пошагового исполнения ассемблерных инструкций.
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
При запуске программы на OpenGL у меня вылезла ошибка о несовместимости 16-разрядной программы, с 32-битной системой
Подскажите, происходит ли реальное дублирование ключей при вставке значений с одинаковым ключом в std::multimap?