在 Trace32 的断点条件下使用寄存器

Using registers in break point conditions with Trace32

尝试在特定位置设置断点并设置基于其中一个寄存器值的触发条件,例如R1(Cortex-R 家族 CPU)。

trace32有办法吗?条件的语法是什么?

您还可以在断点条件下检查寄存器值。

但是,请注意条件断点总是会干扰芯片的 run-time 行为。这意味着您的目标 CPU 将始终停在断点位置,然后调试器评估条件,然后在不满足条件的情况下重新启动 CPU。 (请注意,"conditional breakpoints" 与 "data-breakpoints"(写入特定位置的特定值)不同。Data-breakpoints 在很多芯片上都是 non-intrusive(比如你的 Cortex-R)).

基本技巧是使用 PRACTICE 函数 Register() 访问 core-register。

要设置程序断点,停止在某个程序位置并保持停止状态,如果 core-register 包含某个值,请使用以下命令之一:

  • Break.Set <prog.addr|symbol> /Program /CONDition Register(<reg.>)==<reg.value>
  • Break.Set <prog.addr|symbol> /Program /VarCONDition \Register(<reg.>)==<value>

例如:

  • Break.Set P:0x1000 /Program /CONDition Register(R0)==0x42
  • Break.Set P:0x1000 /Program /VarCONDition \Register(R0)==0x42

这两个命令的区别?第一个使用 TRACE32 表达式,其中符号代表它们的地址(就像链接器看到的符号一样)。第二个使用 so-called HLL 表达式,其中符号代表 C/C++ 语言中的变量。 (HLL 表达式 == C-style 表达式)

通常在 HLL 表达式中编写条件更容易(尤其是当它们处理变量时),而在 TRACE32 表达式中使用 PRACTICE 函数通常更容易。

您还可以在 Break.Set 对话框中设置条件:单击按钮 "advanced",然后在字段 "CONDition" 中单击您的条件。 "CONDition" 字段右侧的 HLL 复选框定义您是否使用 HLL 表达式。