Trace32 PRACTICE脚本中符号表遍历的优化方法问询
优化Trace32符号表遍历的方法
你之前尝试的sYmbol.ForEach其实就是最优解,只是没用到它的占位符引用机制——可以在指定命令里用%s(符号名)、%a(符号地址)、%t(符号类型)等占位符直接引用当前遍历的符号,无需导出文本再生成脚本。
基础用法示例
比如你测试的ECHO命令,正确写法应该是:
sYmbol.ForEach "ECHO 当前符号: %s"
执行后会遍历所有符号,逐个打印符号名。
带过滤的遍历
如果需要筛选特定类型/名称的符号,直接在后面加参数即可:
- 遍历所有全局变量:
sYmbol.ForEach "ECHO 全局变量: %s, 地址: %a" "GLOBAL*" "VAR"
- 遍历以
HAL_开头的函数:
sYmbol.ForEach "ECHO HAL函数: %s, 入口地址: %a" "HAL_*" "FUNC"
复杂命令执行
如果要对每个符号执行多步操作,可以把逻辑写到子脚本里,通过DO命令调用:
- 编写子脚本
process_symbol.cmm:
// 获取传入的符号名 LOCAL &symbolName &symbolName = ARG(1) // 执行自定义操作 ECHO 正在处理符号: &symbolName Data.dump &symbolName // 打印符号内存内容 List.Callstack &symbolName // 查看函数调用栈(仅对函数符号有效)
- 用
sYmbol.ForEach批量调用:
sYmbol.ForEach "DO process_symbol.cmm %s" "*" "FUNC"
对比原有方法的优势
- 无需导出符号表到文本,也不用Python生成脚本,全程在Trace32环境内完成,减少中间步骤
- 支持通过名称/类型精准过滤符号,避免处理无关符号
- 占位符直接关联符号属性,无需额外解析逻辑
内容的提问来源于stack exchange,提问作者Anand Narawade
相关产品推荐
相关产品推荐

