我想设置一个断点,当两个变量包含某个值时停止我的应用程序。例如,当 x==10 和 y==11 时停止执行。
如何在劳特巴赫 TRACE32 中实现这一目标?
我想设置一个断点,当两个变量包含某个值时停止我的应用程序。例如,当 x==10 和 y==11 时停止执行。
如何在劳特巴赫 TRACE32 中实现这一目标?
该命令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,并且如果其他变量也具有正确的值,则保持停止状态。