需要__alignof__的调试符号

时间:2018-12-12 19:24:17

标签: c gdb glibc

我正在调试glibc库。我已经用-g3 -O标志构建了它。我可以打印大多数宏,但不能打印此宏。我正在调试malloc(),并且有很多使用__alignof__的宏。但是我在glibc源代码的任何地方都找不到它的定义。这是一个示例:

(gdb) p MALLOC_ALIGN_MASK
No symbol "__alignof__" in current context.

而且__builtin_offsetof也遇到了同样的问题。但这是一个内置宏。因此,这两种情况有些不同。解决此问题将加快我的调试速度。

2 个答案:

答案 0 :(得分:3)

您将不会获得任何调试信息。由于__alignof__sizeof一样,因此仅在编译时是已知的。请参阅<stdalign.h>中的alignof

即使重新编译GCC本身,也不会得到它(没有 no 调试信息)。 __alignof__在编译时被处理(因此,对于x86-64 ABI,__alignof__ (double)在编译期间被8替换)。

您可以自己猜测MALLOC_ALIGN_MASK的扩展值。

您可以定义const int my_malloc_align_mask = MALLOC_ALIGN_MASK;并在调试器中使用p my_malloc_align_mask

  

我正在调试glibc库。

这很奇怪。您应该信任 glibc库,使其表现为已记录的行为(是的,请注意未定义的行为)。

答案 1 :(得分:2)

GDB仅具有非常近似的C和C ++实现。它不使用与GCC相同的C和C ++解析器,因此缺少某些内容,包括此GCC扩展。 GDB可以识别_Alignof,但与__alignof__并不完全相同。但是在这种情况下它将起作用,因此您可以更改glibc源以使用它。

LLDB使用Clang解析器,因此不会遭受此特定问题的困扰,但在这里不能为您提供帮助,因为显然,调试器无法识别由-g3选项生成的DWARF数据,因此宏信息为可执行文件中缺少。