有没有办法在GDB的Python API中(或直接在GDB中)获得类型的对齐?

时间:2017-03-25 10:59:16

标签: gdb gdb-python

对于我正在编写的漂亮打印机,我想知道容器中使用的对齐方式或类型。不幸的是,使用alignof()或任何类似的“标准”运算符不起作用(https://sourceware.org/bugzilla/show_bug.cgi?id=17095)。使用直接在源代码中工作的“典型”宏技巧也不起作用:

p ((char *)(&((struct { char c; double _h; } *)0)->_h) - (char *)0)
A syntax error in expression, near `{ char c; double _h; } *)0)->_h) - (char *)0)'.

这是可能的,或者唯一的方法是在内部得到GDB的支持吗?

1 个答案:

答案 0 :(得分:2)

无法获取此信息,因为目前gdb没有这个信息。

在DWARF第5版之前,没有标准的方法来表示调试信息中的对齐方式。 DWARF 5添加了DW_AT_alignment,但gdb仍然只是忽略了这个属性;通过Python API公开它需要读取它并将其存储在gdb的内部struct type中。我还不知道编译器是否发出了这个属性。

如果你非常绝望,你可以使用gdb compile功能或自己运行编译器,让它以可以提取的方式发出对齐。

但是,通常从相关的类型大小计算对齐并不太难,如果您的目标体系结构相对有限,那么只需滚动自己的对齐计算机就可能更简单。