首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >需要调试__alignof__符号

需要调试__alignof__符号
EN

Stack Overflow用户
提问于 2018-12-12 19:24:16
回答 2查看 255关注 0票数 1

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

代码语言:javascript
复制
(gdb) p MALLOC_ALIGN_MASK
No symbol "__alignof__" in current context.

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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库的行为与文档一样(是的,注意未定义的行为)。

票数 3
EN

Stack Overflow用户

发布于 2019-01-13 12:37:57

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

LLDB使用Clang解析器,因此不受此特殊问题的影响,但在这里不会对您有所帮助,因为很明显,调试器不识别由-g3选项生成的矮小数据,因此可执行文件中缺少宏信息。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53750010

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档