Lauterbach Trace32生成函数统计时遇栈溢出问题,求解决方案
解决Lauterbach Trace32函数统计栈溢出及精准追踪函数的方案
一、栈溢出问题解决办法
针对函数调用过多导致的Trace.STATistic.Func命令栈溢出,可尝试以下方案:
- 调整Trace32内存分配参数:在PRACTICE脚本开头增加内存配置命令,扩大统计模块的栈空间:
数值可根据实际调用量调整(单位为字节),调整后需重启Trace32生效。SYStem.MemSize.STATistic 0x100000 - 分批处理追踪数据:不要一次性加载完整追踪文件,通过时间或地址范围拆分处理:
按时间范围过滤:
按函数地址范围过滤:Trace.RANGE.Time <起始时间> <结束时间> Trace.STATistic.Func TotalRatio Total MIN MAX AVeRage Count InternalRatio TotalBAR /Sort TotalRatioTrace.Filter.Add Func <起始地址> <结束地址> Trace.STATistic.Func TotalRatio Total MIN MAX AVeRage Count InternalRatio TotalBAR /Sort TotalRatio - 简化统计输出项:减少不必要的统计字段,降低计算负载:
Trace.STATistic.Func TotalRatio Total MIN MAX AVeRage Count /Sort TotalRatio
二、仅追踪指定函数的配置方案
1. 使用Trace.Filter规则精准追踪
- 按函数名称过滤(需提前加载完整符号表):
Trace.Filter.Add Func main sub_func1 sub_func2 Trace.Filter.On - 按地址范围过滤:
Trace.Filter.Add Func 0x80001000 0x80002000 Trace.Filter.On - 排除不需要的函数:
Trace.Filter.Exclude Func idle_task log_func Trace.Filter.On
2. 硬件层面优化追踪范围
利用POWERTRACE 3的硬件过滤功能减少USB3传输的数据量:
- 在Trace32的
Trace.Config窗口启用硬件地址过滤,仅捕获目标函数所在地址段的指令。 - 配置触发条件,仅在进入目标函数时开始追踪、退出时停止,进一步缩小数据量。
三、注意事项
- 符号表加载完整是按名称过滤的前提,确保使用
LOAD.Elf或LOAD.Sym命令正确加载符号。 - 拆分处理数据时,需注意统计结果的一致性,可手动合并分批统计的数据。
内容的提问来源于stack exchange,提问作者Eli Agronov
相关产品推荐
相关产品推荐

