【问题标题】:How many time a function is called in Trace32?Trace32 中调用了多少次函数?
【发布时间】:2021-04-14 09:48:08
【问题描述】:

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

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

【问题讨论】:

  • Trace.state窗口中选择了什么METHOD? (菜单 > 跟踪 > 配置...)
  • @Holger 我测试了 ONCHIP,但我无法选择 Analyzer 或 CANalyzer。这两个选项不可用。

标签: function time trace32 lauterbach


【解决方案1】:

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

片上跟踪缓冲区可能不是很大。因此,当它溢出时,它将停止记录或覆盖最旧的数据。所以你的片上缓冲区只能记录一定数量的执行指令。 因此,请在 Window Trace.state 中观察您的跟踪缓冲区是如何填满的。

如果你只关心单个函数被调用了多少,我建议只记录这个函数的调用。因此,在您的芯片中编写一个跟踪过滤器。您可以使用命令Break.Set <em>&lt;your function's name&gt;</em> /TraceEnable 执行此操作。尽管该命令听起来像“设置断点”,但由于选项“/TraceEnable”,它实际上是在编写跟踪过滤器

接下来,使用Trace.Init 清除跟踪缓冲区,运行代码直到遇到断点并打开Trace.STATistic.sYmbol Count /CountALL,它会显示调用函数的频率。确保(即使使用有源过滤器)您的跟踪缓冲区在您的应用程序运行时不会溢出。


如果您不能使用片上跟踪,您可以创建一个变量,例如使用Var.NEWGLOBAL int \count=0 并在函数的条目上设置一个断点,每次断点被命中时,计数变量都会递增。例如。像这样:Break.set myFuncName /CMD "Var.ASSIGN \count++" /RESUME 。使用Var.View %e \count 观察计数变量。

【讨论】:

  • 我有一个错误“没有跟踪许可证,片上跟踪限制为 5 分钟”。我和你写的一样,我还是有问题。
  • 我有另一个答案,我怎么能写一个脚本来做到这一点?以及当片上缓冲区已满时如何停止执行?
  • 如果要使用片上迹线,实际上需要有迹线许可证。对不起,我没有考虑过。由于跟踪绝对是解决您问题的最佳解决方案,我认为您应该考虑购买这样的许可证。
  • 无需跟踪即可创建变量,例如使用Var.NEWGLOBAL int \count=0 并在函数的条目上设置一个断点,该断点在每次被命中时递增您的变量。例如。像这样:Break.set myFuncName /CMD "Var.ASSIGN \count++" /RESUME。用Var.View %e \count观察变量
  • 关于为TRACE32写脚本请看lauterbach.com/pdf/training_practice.pdf
猜你喜欢
  • 2011-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多