对于我正在编写的漂亮打印机,我想知道容器中使用的对齐方式或类型。不幸的是,使用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的支持吗?
答案 0 :(得分:2)
无法获取此信息,因为目前gdb没有这个信息。
在DWARF第5版之前,没有标准的方法来表示调试信息中的对齐方式。 DWARF 5添加了DW_AT_alignment
,但gdb仍然只是忽略了这个属性;通过Python API公开它需要读取它并将其存储在gdb的内部struct type
中。我还不知道编译器是否发出了这个属性。
如果你非常绝望,你可以使用gdb compile
功能或自己运行编译器,让它以可以提取的方式发出对齐。
但是,通常从相关的类型大小计算对齐并不太难,如果您的目标体系结构相对有限,那么只需滚动自己的对齐计算机就可能更简单。