Распечатать макет объекта C++ с помощью компилятора g++
Есть ли способ напечатать макет объекта C++, используя компилятор g ++ или любым другим способом. Упрощенный пример (при условии, что int занимает 4 байта)
class A{
int a;
};
class B:public A{
int b;
}
так что результат будет
A-
0 4
+ a +
B-
0 4 8
+ A.a + b +
Было бы полезно понять расположение объектов (в моем случае код виртуальной машины).
Заранее спасибо.
С уважением, Захир
3 ответа
Глядя на страницы руководства, -fdump-class-hierarchy
может быть?
Информация, которую вы ищете, нужна отладчикам и передается им при компиляции с -g
, На платформах ELF/DWARF (таких как Linux) вы можете увидеть, что там, выполнив:
g++ -g -c foo.cc
readelf -w foo.o
На других платформах objdump -g foo.o
может работать.
Для ELF/DWARF pahole выглядит как хорошее место для старта.
С ++ не имеет самоанализа. Как только ваш код скомпилирован, каждая часть информации о классах теряется, за исключением того, что typeid
а также std::type_info
могу дать вам.