You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 01:57:00