В отладчике введите x/10i main
. Это показывает первые десять инструкций после точки входа main
. (Вы можете использовать число, отличное от десяти, если хотите). Ищите инструкцию возврата. Это может быть что-то вроде ret
или retq
. Если он не появляется в первых десяти инструкциях, нажмите клавишу возврата. (Это повторяет / продолжает предыдущую команду, показывая следующие десять инструкций. Вы также вводите x/10i
, чтобы продолжить с текущего местоположения.) Когда вы видите инструкцию возврата, считайте инструкции от main
до нее.
Вы также можете скомпилировать сборку с помощью ключа -S
GCC. Это создаст файл, содержащий источник сборки, имя foo.s
, если ваш исходный файл имел имя foo.c
. Затем вы можете просмотреть его в текстовом редакторе, чтобы посчитать инструкции от метки main:
до возврата. (Этот файл может быть загроможден различной другой информацией - метками без инструкций, комментариями, вставленными компилятором для информационных / отладочных целей, специальными директивами ассемблера, которые не являются инструкциями, и т. Д., Поэтому подсчет инструкций в нем может быть затруднен, если вы не знает, какие вещи являются инструкциями, а какие нет. Отладчик может быть проще использовать для этой задачи, поскольку он показывает необработанные инструкции.)
Технически, функция в C не обязательно компилируется в простой набор последовательных инструкций. Компилятор может встраивать код из вызываемых функций в вызывающую функцию. Теоретически он мог бы поместить инструкции для одной функции в несколько разных мест (хотя, по моему опыту, компиляторы, как правило, этого не делают), с переходами между ними. Таким образом, подсчет инструкций, как правило, не полезен для простых занятий в классе и учебных занятий.