我正在调试glibc库。我用-g3 -O标志构建了它。我可以打印大多数宏,但这个不能打印。我正在调试malloc(),有很多宏使用__alignof__。但是我在glibc源代码中找不到它的定义。下面是一个示例:
(gdb) p MALLOC_ALIGN_MASK
No symbol "__alignof__" in current context.而且我在__builtin_offsetof上也遇到了同样的问题。但这是一个内置的宏。所以这两种情况有点不同。解决这个问题会加快我的调试速度。
发布于 2018-12-12 20:18:54
您将得不到任何调试信息。因为__alignof__和sizeof一样,只有在编译时才知道。见对齐从<stdalign.h>
即使通过重新编译GCC本身,您也不会得到它(没有可用的调试信息)。__alignof__是在编译时处理的(因此__alignof__ (double)在编译过程中被8所取代,用于x86-64abi)。
您可以自己猜测MALLOC_ALIGN_MASK的扩展值。
您可以在调试器中定义const int my_malloc_align_mask = MALLOC_ALIGN_MASK;并使用p my_malloc_align_mask。
我正在调试glibc库。
这太奇怪了。您应该相信glibc库的行为与文档一样(是的,注意未定义的行为)。
发布于 2019-01-13 12:37:57
GDB只有一个非常近似的C和C++实现。它不使用与GCC相同的C和C++解析器,因此缺少一些东西,包括GCC扩展。GDB识别_Alignof,但它与__alignof__不完全相同。但是在这种情况下,它可以工作,因此您可以更改glibc源来使用它。
LLDB使用Clang解析器,因此不受此特殊问题的影响,但在这里不会对您有所帮助,因为很明显,调试器不识别由-g3选项生成的矮小数据,因此可执行文件中缺少宏信息。
https://stackoverflow.com/questions/53750010
复制相似问题