我正在调试 glibc 库。我用 -g3 -O 标志构建了它。我可以打印大多数宏,但不能打印这个。我正在调试 malloc(),并且有很多使用 __alignof__ 的宏。但是我在 glibc 源代码中的任何地方都找不到它的定义。这是一个例子:
(gdb) p MALLOC_ALIGN_MASK
No symbol "__alignof__" in current context.
我也遇到了与 __builtin_offsetof 相同的问题。但这是一个内置的宏。所以这两种情况有点不同。解决这个问题会加快我的调试速度。
最佳答案
您不会获得任何调试信息。自 __alignof__
就像sizeof
,仅在编译时已知。参见 alignof来自 <stdalign.h>
即使重新编译 GCC 本身,您也不会得到它(没有可用的调试信息)。 __alignof__
在编译时处理(因此对于 x86-64 ABI,__alignof__ (double)
在编译期间被 8 替换)。
MALLOC_ALIGN_MASK
的扩展值大家可以自己猜.
你可以定义一个 const int my_malloc_align_mask = MALLOC_ALIGN_MASK;
并使用 p my_malloc_align_mask
在调试器中。
I'm debugging the glibc library.
这很奇怪。你应该信任 glibc
库以记录的方式运行(是的,当心未定义的行为)。
关于c - 需要 __alignof__ 的调试符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53750010/