需要 __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 数据,因此宏可执行文件中缺少信息。
我正在调试 glibc 库。我用 -g3 -O 标志构建了它。我可以打印大多数宏,但不能打印这个。我在调试malloc(),里面有很多使用__alignof__的宏。但是我在 glibc 源代码中的任何地方都找不到它的定义。这是一个例子:
(gdb) p MALLOC_ALIGN_MASK
No symbol "__alignof__" in current context.
我也遇到了与 __builtin_offsetof 相同的问题。但这是一个内置的宏。所以这两种情况有点不同。解决这个问题会加快我的调试速度。
您不会获得任何调试信息。由于 __alignof__
与 sizeof
一样, 仅在编译时已知 。从 <stdalign.h>
即使重新编译 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 数据,因此宏可执行文件中缺少信息。