1

对于我正在编写的漂亮打印机,我想知道容器中使用的对齐方式或类型。不幸的是,使用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 在内部支持它?

4

1 回答 1

2

没有办法得到这些信息,因为目前 gdb 没有它。

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

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

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

于 2017-04-01T22:28:01.130 回答