C++ 给定一个从C++;使用gcc,如何确定其中某个类型的大小?

C++ 给定一个从C++;使用gcc,如何确定其中某个类型的大小?,c++,binutils,C++,Binutils,有没有办法使用binutils工具来实现这一点?例如: // x.cc typedef long long MyInt; int main(int argc, char* argv[]) { // blah blah blah } 然后: 如何分析a.out以获得sizeof(MyInt)?GDB可以做到这一点,但我不想使用GDB,因为它对于大型二进制文件来说速度非常慢。我认为最好还是使用GDB bintuls主要处理可执行文件格式(ELF)——调试内容保存在该格式中。除了运行objdum

有没有办法使用binutils工具来实现这一点?例如:

// x.cc
typedef long long MyInt;
int main(int argc, char* argv[]) {
  // blah blah blah
}
然后:


如何分析a.out以获得sizeof(MyInt)?GDB可以做到这一点,但我不想使用GDB,因为它对于大型二进制文件来说速度非常慢。

我认为最好还是使用GDB

bintuls主要处理可执行文件格式(ELF)——调试内容保存在该格式中。除了运行
objdump-g-xyourbinary
之外,我还没有看到过很多处理调试符号的实用程序


总之,通过elf和dwarf进行解析以提取类型是非常可怕和不平凡的,尽管调试器已经完成了这项工作。

您需要做GDB正在做的事情,并自己阅读dwarf调试信息。有两个工具可以帮助实现这一点,比如readelf和dwarfdump。去阅读FAQ和其他的好东西,看看这是否能满足你的需要


这个答案是假设您正在一个普通的Linux平台上运行。其他平台的其他工具可能也适用于您,但我不是问这些问题的人

readelf能够列出dwarf调试信息:

readelf -wi
查找DW_TAG_变量元素,该元素的名称har DW_等于MyInt,并且是表示此编译单元的DW_TAG_compile_单元的直接子元素

使用DW_AT_type属性查找此变量的DW_TAG_base_类型。 DW_AT_type属性是从存储此类型信息的CU开始的偏移量。这些偏移列在输出的左侧(以s为单位)。
查看此模具的DW_at_byte_size属性。这是以字节为单位的类型大小。

GDB对于lange二进制文件来说速度很慢!?!?
readelf -wi