我想设置一个断点,当两个变量包含某个值时,它会停止我的应用程序。例如。当x == 10和y == 11时停止执行。
我如何在劳特巴赫TRACE32中实现这一目标?
答案 0 :(得分: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”时,CPU将立即重启。
当然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,并在另一个变量也具有正确的值时保持停止。