有什么方法可以在 GDB 的 Python API 中(或直接在 GDB 中)获得类型的对齐方式?

Is there any way to obtain type's alignment in GDB's Python API (or directly in GDB)?

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

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 内部支持它?

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

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

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

但是,通常根据相关字体大小计算对齐并不太难,如果您的目标体系结构相对有限,那么使用您自己的对齐计算机可能会更简单。