Опция компилятора Visual C++ для сброса иерархии классов

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

2 ответа

Решение

Пытаться

cl.exe /d1reportAllClassLayout test.cpp

Вывод что-то вроде:

Класс request_handlerAttribute  size(8):
        +---
 0      | название
 4      | СДЛ
        + ---



Размер класса perfmonAttribute (8):
        + ---
 0 | название
 4      | регистр
        |  (Размер =3)
        +---

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

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

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

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

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

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

Другие вопросы по тегам