在 Trace32 中调用函数多少次?

问题描述

我只有劳特巴赫的调试器 power-pro。无法追踪,正常吗?

如果它是正常的,我需要知道我怎么知道一个函数调用了多少次?我在我的函数上设置了一个断点,但是当我在同一时间使用 trace.statistic 时它没有显示相同的数字(计数不相同)。

解决方法

如果选择了 Trace.METHOD ONCHIP,则您的芯片实际上支持某些跟踪功能。程序流存储在芯片上的专用存储器中,并通过 JTAG 从那里读取。 (Analyzer 或 CAnalyzer 的方法适用于劳特巴赫硬件,它可以存储从芯片通过专用物理接口发送的程序流。)

片上跟踪缓冲区可能不是很大。因此,当它溢出时,它将停止记录或覆盖最旧的数据。所以你的片上缓冲区只能记录一定数量的已执行指令。 因此,请在窗口 Permission denied to generate login hint for target domain. 中观察您的跟踪缓冲区是如何填满的。

如果你只关心单个函数调用了多少,我建议只记录这个函数的调用。因此在你的芯片中编程一个跟踪过滤器。您可以使用命令 Trace.state 执行此操作。尽管该命令听起来像“设置断点”,但由于选项“/TraceEnable”,它实际上是在编程跟踪过滤器

接下来,使用 Break.Set <your function's name> /TraceEnable 清除您的跟踪缓冲区,运行您的代码直到它遇到您的断点并打开 Trace.Init,它会显示您的函数被调用的频率。确保(即使使用活动过滤器)您的跟踪缓冲区在您的应用程序运行时不会溢出。


如果您不能使用片上跟踪,您可以创建一个变量,例如使用 Trace.STATistic.sYmbol Count /CountALL 并在函数入口设置断点,每次断点被击中时都会增加计数变量。例如。像这样:Var.NEWGLOBAL int \count=0。使用 Break.set myFuncName /CMD "Var.ASSIGN \count++" /RESUME 观察计数变量。