Получение листинга
Часто бывает полезным иметь ассемблерный листинг кода, генерируемого компилятором. С помощью такого листинга можно:
- Посмотреть, как те или иные опции оптимизации отражаются на генерируемом коде
- Посмотреть, каким образом компилятор обрабатывает те или иные конструкции языка программирования
- Выявлять ошибки, связанные с неправильной работой кодогенерации в компиляторе
- Узнать, какие в точности опции были включены при компиляции программы
Ключ компиляции | Назначение |
-S | Остановиться после стадии компиляции, перед стадией ассемблирования. |
-fverbose-asm | Генерировать дополнительные комментарии в ассемблерном листинге. Какие именно "дополнительные комментарии" будут помещены в текст листинга, зависит от версии компилятора. |
Обратите внимание на то, что указание флажка -S просто "останавливает" компилятор после фазы генерации ассемблерного листинга, то есть процесс компиляции прерывается. Как следствие - процесс сборки программы и процесс генерации ассемблерных листингов "несовместимы" между собой. Можно либо получать листинги, либо собирать программу, но не то и другое одновременно. Для получения листингов я обычно создаю отдельный командный файл, который среди прочих опций компиляции содержит флажки -S и -fverbose-asm.
Весьма полезная возможность компилятора - помещать в листинг список всех опций компиляции, которые были включены в данный момент. Дело в том, что включение одних опций (например -O3) может "автоматически" приводить к включению других опций, а документация к GCC не всегда точна в описании подобных зависимостей. Некоторые версии GCC всегда помещают в листинг список используемых опций, другие версии делают это только при наличии флажка -fverbose-asm.