Есть ли способ, похожий на просмотр результата предварительной обработки с помощью gcc -E
— посмотреть, как выглядят мои объекты после компиляции в объектные файлы?
Я говорю о GCC, но решение, включая MSVC, будет в порядке.
Есть ли способ, похожий на просмотр результата предварительной обработки с помощью gcc -E
— посмотреть, как выглядят мои объекты после компиляции в объектные файлы?
Я говорю о GCC, но решение, включая MSVC, будет в порядке.
Для Visual С++:
Наконец-то мне удалось выкопать (хорошо скрытые!) недокументированные флаги компилятора, которые MSVС++ поддерживает с помощью здесь и здесь. Вот они:
/d1reportSingleClassLayoutXXX
/d1reportAllClassLayout
(замените XXX
на имя класса)
Скомпилированные исполняемые файлы GCC, Pahole. Он покажет вам, как компилятор изложил ваши структуры/классы и независимо от того, имеют ли они "дыры" в них. Отверстия заполняются из-за правил выравнивания памяти.
Объектные файлы содержат двоичные данные - только более высокий уровень, который большинство компиляторов может выводить, является ассемблером, поэтому, если вы не можете прочитать, что вам не повезло. Тем не менее, посмотрите этот вопрос для получения дополнительной информации в этой области.
Вы можете проверить расположение двоичных файлов и их содержимое с помощью файлов карт. Используйте /MAP
для VC и -Map
или --print-map
для gcc.
Ваш вопрос немного запутан.
Если вы хотите увидеть результат предварительной обработки с помощью MSVC, вы можете использовать /E
, /P/
или /EP
.
В MSVC имеется недокументированная опция для отображения компоновки данных структур и классов. Мне трудно найти его прямо сейчас.
Конструктор - это еще одна функция (если только она не вставлена). Файлы объектов содержат много информации для компоновщика; поэтому вы должны найти функцию в файле .a(имена функций будут искажены, хотя).