Как проверить код, сгенерированный компилятором C ++? - PullRequest
1 голос
/ 01 декабря 2009

как в теме - есть ли какое-нибудь программное обеспечение для открытия (что?), И здесь я даже не знаю, что открыть - файл с объектным кодом или exe? Мои сегодняшние вопросы (если только сегодня;)) могут показаться немного странными, но я прохожу упражнения с "Язык программирования C ++" от B.S. а иногда я просто застрял на конкретном вопросе. Меня иногда раздражает стиль этой книги (превосходной во многих отношениях), когда он (Б.С.) задает некоторые вопросы, на которые вы не найдете ответа в своей книге о том, как это сделать или даже с чего начать. Как этот, например:

Запустите несколько тестов, чтобы увидеть, действительно ли ваш компилятор генерирует эквивалентный код для итерации, используя указатели, и итерацию, используя индексацию. Если могут быть запрошены различные степени оптимизации, посмотрите, как и как это влияет на качество сгенерированного кода.

Это из главы 5, вопрос 8. До сих пор нигде в этой книге не упоминалось даже о тестировании и анализе кода, сгенерированного компилятором. Во всяком случае, если кто-то может помочь мне с этим, я буду благодарен. Спасибо.

Ответы [ 3 ]

5 голосов
/ 01 декабря 2009

Отладчик поможет вам. Большинство отладчиков позволяют вам останавливать программу и изучать разборки. Приятно то, что они укажут вам право на разбор строки, для которой вы устанавливаете точку останова, а не на весь результат компиляции.

Время от времени я делаю это в Visual Studio - компилирую программу, ставлю точку останова в начале интересующего кода, запускаю программу, затем, когда она останавливается, открываю разборку и сразу вижу код, соответствующий этому Код C ++.

2 голосов
/ 01 декабря 2009

Если вы используете g ++, вы можете сделать g++ -S main.cpp. Это выведет сборку в файл с именем main.s. Однако, если интересующие вас функции распределены по разным .cpp файлам, может быть удобнее сделать objdump в конечном исполняемом файле.

Есть также хороший инструмент под названием embroider , который выводит для вас вывод objdump в виде HTML, связывая различные вызовы функций и переходы.

0 голосов
/ 01 декабря 2009

Многие компиляторы могут генерировать «листинговые» файлы кода сборки, который они генерируют во время компиляции, с вкраплениями операторов из исходного кода C. Также есть инструменты, которые разбирают объектные и исполняемые файлы.

То, как эти инструменты на самом деле активируются, очевидно зависит от вашей цепочки инструментов.

...