需要 __alignof__ 的调试符号

Needs debugging symbols for __alignof__

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

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

我也遇到了与 __builtin_offsetof 相同的问题。但这是一个内置的宏。所以这两种情况有点不同。解决这个问题会加快我的调试速度。

您不会获得任何调试信息。由于 __alignof__sizeof 一样, 仅在编译时已知 。从 <stdalign.h>

查看 alignof

即使重新编译 GCC 本身,您也无法获得它(没有 可用的调试信息)。 __alignof__ 在编译时 被处理 (因此 __alignof__ (double) 在编译期间被 8 替换,对于 x86-64 ABI)。

MALLOC_ALIGN_MASK.

展开后的值你自己猜

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

I'm debugging the glibc library.

这很奇怪。您应该信任 glibc 库以记录的方式运行(是的,当心未定义的行为)。

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

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