Trace32中文网站 > 新手入门 > TRACE32怎么查看内存映射 TRACE32内存地址显示异常如何检查
教程中心分类
TRACE32怎么查看内存映射 TRACE32内存地址显示异常如何检查
发布时间:2026/09/29 11:30:55

  在TRACE32中查看内存映射,先要分清自己要找的是调试器的访问配置、ELF文件的装载范围,还是程序运行时的地址转换关系。这几类地址放在一起比较,容易出现“地址对不上”的情况。下面从查看映射开始,逐项检查内存窗口中的异常显示。

  一、TRACE32怎么查看内存映射

 

  1、确认目标状态和待查地址

 

  先确认调试器连接的目标和核心,再从芯片手册或工程文件中找出待查地址。目标运行时能否读取内存,取决于所用芯片和调试接口。

 

  ①查看TRACE32状态栏,确认当前连接状态和所选核心。

 

  ②对照芯片手册或链接文件,记下待查区域的起始地址与长度。

 

  ③若当前接口不支持运行中读取,点击工具栏【Break】暂停目标。

 

  2、查看调试器的访问映射

 

  MAP.List显示TRACE32内存映射器中的配置,包括已设置的访问限制;它并不是芯片的完整物理内存表。

 

  ①点击【命令输入栏】,输入MAP.List,按【Enter】。

 

  ②在映射窗口查找目标地址所在范围,核对该范围的属性。

 

  ③输入MAP.List<起始地址>,按【Enter】,查看指定地址附近的配置。

 

  3、核对ELF装载范围与内存读数

 

  程序装载到了哪里,需要另看符号映射。sYmbol.List.MAP可显示装载区段及顺序;Data.dump用于读取指定地址的内容。

 

  ①在【命令输入栏】输入sYmbol.List.MAP,按【Enter】,查找对应区段的装载地址。

 

  ②输入sYmbol.List.SECtion,按【Enter】,核对代码段或数据段的地址范围。

 

  ③依次点击【View】→【Dump...】,在【Address/Expression】填入待查地址。

 

  ④在【Width】选择【Byte】,点击【Ok】,记录显示的地址和字节值。

 

  二、TRACE32内存地址显示异常如何检查

 

  1、检查地址是否填错或超出范围

 

  先把输入的地址与芯片手册、链接文件和ELF装载范围对照。程序使用的逻辑地址与下载时使用的地址,可能不是同一个数值。

 

  ①在【Address/Expression】重新输入完整地址,检查十六进制位数。

 

  ②查看sYmbol.List.MAP窗口,确认该地址是否位于预期区段。

 

  ③核对【Dump】窗口地址列前的地址类别前缀。

 

  2、检查MMU地址转换

 

  启用MMU后,需要区分逻辑地址和物理地址。TRANSlation.List显示调试器已建立的静态转换关系;具体页表还应结合当前处理器状态查看。

 

  ①在【命令输入栏】输入MMU.View,按【Enter】,查看MMU寄存器状态。

 

  ②输入TRANSlation.List,按【Enter】,查找对应的逻辑地址和物理地址范围。

 

  ③若使用Arm目标,输入MMU.List PageTable,按【Enter】,核对页表映射。

 

  ④若出现“no MMU table format defined”,返回【MMU.View】检查页表相关寄存器是否已初始化。

  3、检查访问限制和总线错误

 

  Data.dump显示“????????”时,可能是总线读取失败。地址不存在、访问受限,以及读取宽度或对齐方式不合适,都可能导致这种现象。

 

  ①输入MAP.List<异常地址>,按【Enter】,检查该范围的访问限制。

 

  ②打开Data.dump<异常地址>,将【Width】设为【Byte】,再次读取。

 

  ③在【命令输入栏】输入SYStem.LOG,按【Enter】。

 

  ④在日志窗口点击【Init】,将【log】设为【ON】,重新读取异常地址。

 

  ⑤输入SYStem.LOG.List,按【Enter】,查看出错的访问地址及反馈。

 

  4、检查显示宽度与字节顺序

 

  如果地址能够读取,但显示的数值与预期不符,先看原始字节,再看这些字节组合后的数值。读取外设寄存器时,还需遵守手册规定的访问宽度。

 

  ①在【Dump】窗口将【Long】改为【Byte】,逐字节记录内容。

 

  ②将显示宽度改为【Word】或【Long】,比较同一地址的数值。

 

  ③对照芯片手册中的端序和允许的访问宽度,再次读取该地址。

 

  5、检查ELF与目标程序是否一致

 

  地址可读而内容始终不对时,核对当前加载的ELF是否对应目标上运行的程序。还要查看是否有区段装载范围重叠。

 

  ①运行sYmbol.List.MAP,核对异常地址对应的区段及装载顺序。

 

  ②在【Dump】窗口读取该区段起始地址,与当前构建产物的预期字节比较。

 

  ③检查下载脚本中的ELF路径,选用本次构建的文件后重新核对。

 

  三、如何确认调整已经生效

 

  1、保存同一地址的排查记录

 

  记录时统一地址、核心和目标运行状态,便于比较调整前后的结果,也便于其他人复现异常。

 

  ①记录异常地址、所属区段和【Dump】窗口中的显示内容。

 

  ②保存【MAP.List】、【sYmbol.List.MAP】及【TRANSlation.List】中对应的记录。

 

  ③对照芯片手册,标出地址范围或访问宽度不一致的地方。

 

  2、按原条件复查

 

  修改一处配置后,用同一地址和显示宽度重新读取,才能判断这次调整是否解决了问题。

 

  ①重新打开Data.dump<异常地址>,选择原先使用的【Width】。

 

  ②对照修改前的记录,检查地址列、读数和映射范围是否符合预期。

  总结

 

  调试内存问题时,沟通中最容易遗漏的是“这个地址指哪一种地址”。有人依据程序里的逻辑地址描述问题,有人拿芯片的物理地址核对,截图看起来相似,结论却可能不同。保留目标型号、所选核心、异常发生时的运行状态和原始读数,后续换版本或与同事交流时会更容易复现。希望本文能为大家使用TRACE32排查地址问题提供参考;如有TRACE32相关需求,欢迎联系我们咨询。

135 2431 0251