Расположение скомпилированных объектов - PullRequest
16 голосов
/ 26 января 2010

Есть ли способ - очень похожий на просмотр результата предварительной обработки с помощью gcc -E - чтобы увидеть, как выглядят мои объекты после компиляции в объектные файлы?

Я говорю о GCC, но решение, включающее MSVC, подойдет.

Ответы [ 6 ]

22 голосов
/ 25 мая 2010

Для Visual C ++:

Мне, наконец, удалось выкопать (хорошо скрытые!) Недокументированные флаги компилятора, которые MSVC ++ поддерживает, используя информацию из здесь и здесь . Вот они:

/d1reportSingleClassLayoutXXX
/d1reportAllClassLayout

(заменить XXX именем класса)

6 голосов
/ 26 января 2010

Для скомпилированных исполняемых файлов GCC, проверьте Pahole .Он покажет вам, как компилятор выложил ваши структуры / классы и есть ли в них «дыры».Отверстия заполнены из-за правил выравнивания памяти.

0 голосов
/ 02 февраля 2010

Конструктор - это просто другая функция (если она не встроена). Объектные файлы содержат много информации для компоновщика; поэтому вы сможете найти функцию в файле .a (хотя имена функций будут искажены).

0 голосов
/ 26 января 2010

Ваш вопрос немного сбивает с толку.

Если вы хотите увидеть результат предварительной обработки с MSVC, вы можете использовать /E, /P/ или /EP.

В MSVC есть недокументированная опция для отображения структуры данных структур и классов. У меня сейчас проблемы с поиском.

0 голосов
/ 26 января 2010

Вы можете проверить расположение двоичных файлов и их содержимого с помощью файлов карт. Используйте /MAP для VC и -Map или --print-map для gcc.

0 голосов
/ 26 января 2010

Объектные файлы содержат двоичные данные - единственный более высокий уровень, который может выводить большинство компиляторов, - это ассемблер, поэтому, если вы не можете прочитать, что вам не повезло. Однако, посмотрите на этот вопрос для получения дополнительной информации в этой области.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...