TRACE32已连接目标板,反汇编窗口却只显示地址,函数列表里也找不到预期名称。先核对符号文件是否对应板上固件,再看函数是否进入符号表,最后比较符号地址与程序实际执行地址。以下以ELF文件为例。
一、TRACE32怎么加载符号文件
TRACE32可以从ELF中同时加载程序和调试信息,也可以只导入符号。目标板已有程序时,使用只加载符号的方式,避免再次向目标内存写入代码。
1、找到与固件对应的ELF
①在构建输出目录中找到ELF,核对它与板上固件的生成批次、构建配置和时间。
②复制ELF的完整路径,返回TRACE32。
③确认当前调试窗口连接的是运行该程序的处理器内核。
2、加载符号并查看函数
①点击TRACE32底部的命令输入栏,输入Data.LOAD.Elf"ELF完整路径"/NoCODE,按【Enter】。
②查看消息窗口,确认没有文件读取或格式错误。
③输入sYmbol.List.Function,按【Enter】查看函数名称及地址范围。
④需要同时下载程序时,改用Data.LOAD.Elf"ELF完整路径",按【Enter】重新加载。
3、追加其他模块
①需要保留现有符号时,输入Data.LOAD.Elf"模块ELF完整路径"/NoCODE/NoClear,按【Enter】。
②输入sYmbol.List.Module,按【Enter】检查模块列表。
③重新打开sYmbol.List.Function,确认新增模块的函数已出现。加载命令未带/NoClear时,此前导入的符号可能被清除。
二、TRACE32符号加载后函数名称仍无法识别如何排查
先区分两种情况:函数列表中没有目标名称,或列表里有名称、实际执行位置却仍只显示地址。前者重点检查ELF和调试信息,后者重点检查固件版本与装载地址。
1、检查加载选项和文件版本
①输入sYmbol.List.Function,按【Enter】搜索目标函数。
②检查先前的加载命令;若带有/NoSYmbol,删除该选项后重新加载。
③核对ELF与烧录文件是否来自同一次构建。
④将匹配的ELF路径填入Data.LOAD.Elf"ELF完整路径"/NoCODE,按【Enter】后再查一次函数列表。
2、检查ELF中的调试信息
①查看工程的构建设置,确认编译时已生成调试信息。
②检查当前ELF是否经过符号剥离;若经过处理,找到构建时保留的调试文件。
③调试信息单独存放时,输入Data.LOAD.Elf"程序ELF路径"/NoCODE/DeBuGInfoFILE"调试信息路径",按【Enter】。
④再次打开sYmbol.List.Function,核对函数名称与地址。
3、对照符号地址与运行地址
①在sYmbol.List.Function中记录目标函数的起止地址。
②输入sYmbol.List.SECtion,按【Enter】查看对应代码段的地址范围。
③在反汇编窗口记录程序实际执行地址,与函数及代码段地址比较。
④确认程序发生整体搬移、且当前会话只加载这一份符号后,输入sYmbol.RELOCate.shift地址差值,按【Enter】重新核对。
4、查看函数是否被内联
①输入sYmbol.List.InlineFunction,按【Enter】搜索缺失的名称。
②找到对应条目后,打开调用位置,查看内联代码所在的指令地址。
③返回普通函数列表,核对是否确实不存在该函数的独立地址范围。内联函数可能不会以普通函数的形式显示。
5、检查汇编函数是否只是地址标签
①输入sYmbol.List,按【Enter】搜索该汇编函数名称。
②若它显示为单地址标签,输入sYmbol.Modify.AddressToRange函数名,按【Enter】。
③输入sYmbol.Modify.RangeToFunction函数名,按【Enter】。
④打开sYmbol.List.Function,确认它已被列为函数。
三、如何确认符号与程序对应
函数名称出现在列表中,只完成了符号导入检查。还要选一个确定会运行的函数,对照实际执行位置。若函数名称正常、源码文件却打不开,则单独检查源码路径。
1、验证目标函数
①在sYmbol.List.Function中记录目标函数名称和地址范围。
②在命令栏输入List函数名,按【Enter】打开代码视图。
③让程序停在该函数附近,对照当前执行地址与记录的范围。
④返回原先只显示地址的窗口,检查函数名称是否出现。
2、检查源码路径并保存设置
①函数已能识别、源码仍无法打开时,输入sYmbol.List.SOURCE,按【Enter】查看记录的路径。
②若源码位置已变,输入sYmbol.SourcePATH.Translate"原路径""当前路径",按【Enter】后重新打开源码。
③记录本次使用的ELF路径、固件版本和必要的地址偏移;重启调试会话后用同一函数复查。
总结
TRACE32加载符号后仍看不到函数名,可以先用函数列表判断名称是否已经导入,再检查ELF是否与板上程序匹配、调试信息是否完整、地址是否发生搬移。个别内联函数和汇编标签还需按各自的符号类型查看。保留验证过的ELF路径、加载命令与固件版本,下次调试同一程序时更容易复现结果。希望这些步骤对大家有帮助;如有TRACE32相关需求,欢迎联系我们咨询。