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

RTEMS下C++程序调试异常:ELF调试段缺失源文件路径

问题分析与解决

1. WAF不给C++传递调试参数的原因

WAF中针对C和C++的编译参数是分开管理的:

  • CFLAGS 仅作用于C语言编译(对应gcc)
  • CXXFLAGS 才是作用于C++编译(对应g++)

你的wscript大概率只把-Og和-g添加到了CFLAGS变量中,没有同步配置CXXFLAGS,导致g++编译时根本没拿到调试参数。

2. g++未写入源文件路径到ELF调试段的原因

g只有在编译时带上-g参数(开启调试信息生成),才会将源文件路径、符号表等调试数据写入ELF的.debug_info、.debug_line等段中。因为你的C编译没拿到-g,自然不会生成这些调试信息,objdump和gdb也就找不到init.cpp的路径。

解决步骤

修改你的wscript,将调试参数同时添加到CFLAGS和CXXFLAGS中:

def build(bld):
    # 给C和C++都开启调试优化与调试信息
    bld.env.CFLAGS += ['-Og', '-g']
    bld.env.CXXFLAGS += ['-Og', '-g']
    
    # 后续的目标配置示例
    bld.program(
        target='led_cpp',
        source='init.cpp',
        # 其他必要配置,比如链接RTEMS库等
    )

验证方法

  • 重新编译时,查看编译命令行输出,确认g++调用时包含了-Og和-g参数
  • 用objdump --debugging led_cpp检查ELF文件,应该能找到init.cpp的路径信息
  • gdb连接后执行info sources,即可看到init.cpp出现在列表中

内容的提问来源于stack exchange,提问作者embedded.kyle

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 05:05:57