如何在Trace32中同时显示整个项目源代码与汇编代码
不需要逐个添加所有源文件,按如下步骤配置即可完成多级目录下的源码自动关联:
前置检查
首先确认交叉编译生成的ELF包含完整调试信息:编译时需添加-g选项,且不要执行strip操作去除符号,否则ELF内不会记录源码路径信息,无法完成关联。可在Trace32命令行执行symbols.source.path.list查看ELF内嵌的编译时源码路径,确认调试信息正常存在。
源码路径配置方法
Trace32支持递归目录搜索,无需逐个添加子目录或源文件:
- 路径前缀替换(编译路径与本地源码路径不一致时必须配置)
如果ELF是在其他环境(编译服务器、容器等)生成的,其内嵌的源码路径与当前调试机的源码存储路径不匹配,需要先执行前缀替换,命令格式:
sYmbol.SourcePATH.Replace "<编译时的源码根路径前缀>" "<当前调试机的源码根路径>"
例如编译时源码统一存放在/opt/build/myproj/路径下,当前调试机源码存放在E:/work/myproj/,则命令写为:
sYmbol.SourcePATH.Replace "/opt/build/myproj/" "E:/work/myproj/"
注意路径末尾要加斜杠,避免前缀匹配错误。
- 递归添加源码搜索根目录
执行如下命令,Trace32会自动递归遍历指定根目录下的所有层级子目录,自动匹配对应源文件,无需手动逐个添加子目录:
sYmbol.SourcePATH.Tree "<当前调试机的源码根路径>"
修正ELF加载脚本
在原有加载脚本中补充源码配置逻辑,同时给ELF加载命令添加/SOURCE参数,加载时自动完成源码关联,修正后的参考脚本如下:
system.down system.reset system.up ; 路径替换,编译路径与本地路径一致可注释该行 sYmbol.SourcePATH.Replace "<编译时源码根路径>" "<本地源码根路径>" ; 递归加载所有子目录下的源文件匹配规则 sYmbol.SourcePATH.Tree "<本地源码根路径>" ; 加载ELF,自动关联源码 Data.Load.elf <pathtoelf> /SOURCE ; 加载完成后跳转到main函数验证关联效果 List.go main
异常排查
如果配置后仍只显示汇编,可执行sYmbol.SourcePATH.Check命令,Trace32会列出所有未匹配到的源文件及其内嵌原始路径,根据返回结果调整路径替换规则即可。
补充注意事项:
- 调试版本建议使用
-O0 -g选项编译,高优化级别下会出现源码与汇编地址错位、变量被优化的问题,影响调试体验。 - Windows环境下路径使用正斜杠
/或反斜杠\均可识别。 - 不要使用
sYmbol.SourcePATH.Add命令逐个添加单目录,该命令不会递归遍历子目录,仅适合单目录结构的小项目。
内容的提问来源于stack exchange,提问作者jasan singh chugh
相关产品推荐
相关产品推荐

