6

我想设置一个断点,当两个变量包含某个值时停止我的应用程序。例如,当 x==10 和 y==11 时停止执行。

如何在劳特巴赫 TRACE32 中实现这一目标?

4

1 回答 1

1

该命令Var.Break.Set有一个选项\VarCONDition,它允许您指定 CPU 在遇到相应断点后保持停止的条件。(在设置断点的对话框中,当您单击“高级”时,您还会找到“条件”字段。)

因此,对于您的场景,所需的两个命令将是:

Var.Break.Set x /Write /VarCONDition (x==10 && y==11) 
Var.Break.Set y /Write /VarCONDition (x==10 && y==11) 

因此,每次写入 x 或 y 时 CPU 都会停止,但在不满足条件“x==11 && y==11”时会立即重新启动。

当然 x 和 y 必须位于内存中。如果变量是在 CPU 寄存器中实现的,它将不起作用(除非您拥有这些罕见的 CPU 之一,它支持核心寄存器上的读/写断点。)

如果您使用的是 Cortex-A 或 Cortex-R CPU,您还必须添加选项“/AfterStep”,因为这些处理器对于地址写入断点也具有先断后合行为。

如果您的 CPU 支持数据值断点(例如 Cortex-M4),您也可以像这样设置断点

Var.Break.Set x /Write /DATA 10. /VarCONDition y==11 
Var.Break.Set y /Write /DATA 11. /VarCONDition x==10. 

这要好得多,因为它仅在将正确的值写入 x 或 y 时停止 CPU,并且如果其他变量也具有正确的值,则保持停止状态。

于 2019-12-02T16:02:35.913 回答