为什么extern函数声明没有对应的DISubprogram调试信息?
原因分析
func在当前编译的test.c中仅为外部函数声明,没有实际实现:LLVM的DISubprogram是用于描述函数定义的调试元数据,只会给当前编译单元内有完整实现(对应IR中的define指令)的函数生成。你给出的IR中func对应的是declare指令,属于外部导入符号,自然不会生成对应的DISubprogram。- 你的
test.c没有引入test.h头文件:就算你在头文件中声明了func,但当前编译的test.c没有写#include "test.h",编译器处理test.c时完全不知道func的声明位置、关联文件等信息,就算要给函数声明生成辅助调试信息也没有数据源。 - 如果你需要看到
func的DISubprogram,可以做两处修改:一是在test.c开头加#include "test.h",二是将func的实现放在同一个编译单元,或者和test.c一起编译,此时func会有对应的define指令,也就会生成对应的DISubprogram调试信息。
内容的提问来源于stack exchange,提问作者Richard Chien
相关产品推荐
相关产品推荐

