c - 需要 __alignof__ 的调试符号

标签 c gdb glibc

我正在调试 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/

相关文章:

c - 对函数指针的断言失败

c++ - 在 GDB 启动时禁用名称 demangling

c - LD_PRELOAD 和外部变量

c - 调试seg错误(无法修改源代码或makefile)

linux - 错误/lib/x86_64-linux-gnu/libc.so.6 : version `GLIBC_2.34' not found

c - Linux 中标准库的头文件是如何安装的?

C opendir() 不打开目录?

mysql - 在静态库中链接 Mysqllib (MAC OS X.8.4, Xcode 4.6.3)

c++ - 嵌入式 Windows XP 中的网络接口(interface)设置

c++ - GDB 提示缺少 raise.c