Опция компилятора 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.
Короче говоря, достаточно того, что трудно исключить с реальной уверенностью. В то же время, там мало того, что потребовалось бы гораздо больше работы, чтобы сделать нечто большее, чем намеки на расплывчатую вероятность того, что у компилятора может быть некоторая недокументированная способность выводить некоторые внутренние структуры.