Опция компилятора Visual C ++ для сброса иерархии классов - PullRequest
4 голосов
/ 13 июня 2010

Есть ли какая-либо опция компилятора в MS Visual C ++, эквивалентная GCC -fdump-class-иерархия? то есть отображение макета таблицы виртуальных функций.

Ответы [ 2 ]

8 голосов
/ 17 июня 2010

попробуй

cl.exe / d1reportAllClassLayout test.cpp

Вывод выглядит примерно так:

class request_handlerAttribute  size(8):
        +---
 0      | name
 4      | sdl
        +---



class perfmonAttribute  size(8):
        +---
 0      | name
 4      | register
        |  (size=3)
        +---

Нашел делать: + findstr / i class c1xx.dll> c1xx.txt
+ а затем вручную проверить c1xx.txt

Надеюсь, это поможет, Бенедетто

PS: Это явно недокументированный и неподдерживаемый ключ.
Смотрите также здесь для аналогичного переключателя.

0 голосов
/ 13 июня 2010

Я совершенно уверен, что нет никакого документированного переключателя. Если вы немного посмотрите на файл cl.exe, вы можете найти различные строки, некоторые из которых связаны с параметрами командной строки. Один из них говорит что-то вроде: «Разбиение (options =% s) \ 0nul \ 0map \ 0ast».

То, что «ast» может относиться к абстрактному синтаксическому дереву, что может означать, что возможен какой-то дамп AST компилятора - но я не особо разбирался в деталях, чтобы выяснить, о чем идет речь, нацелен или многое другое. В этом отношении «ast» и «options =» могут вообще не быть связаны. Даже если он может создавать дампы AST, это не обязательно означает, что он может рассказать вам о макете vtable.

Короче говоря, этого достаточно, чтобы было трудно исключить с полной уверенностью. В то же время, там достаточно мало, чтобы потребовалось намного больше работы, чем просто намекнуть на расплывчатую вероятность того, что у компилятора может быть некоторая недокументированная способность выводить некоторые внутренние структуры.

...