尝试在特定位置设置断点并设置基于其中一个寄存器的值的触发条件,例如R1(Cortex-R系列CPU)。
有没有办法在trace32中执行此操作?条件的语法是什么?
答案 0 :(得分:3)
您还可以在断点条件下检查寄存器值。
但请注意,条件断点始终会干扰芯片的运行时行为。这意味着您的目标CPU将始终在断点位置停止,然后调试器评估条件,然后重新启动CPU,如果条件不满足。 (注意,"条件断点"与"数据断点"(某些值写入特定位置)不同。数据断点在很多芯片上都是非侵入性的(像你的Cortex-R))。
基本技巧是使用PRACTICE函数Register()来访问核心寄存器。
要设置程序断点,要在某个程序位置停止并保持停止状态,如果核心寄存器包含某个值,请使用以下命令之一:
Break.Set <prog.addr|symbol> /Program /CONDition Register(<reg.>)==<reg.value>
Break.Set <prog.addr|symbol> /Program /VarCONDition \Register(<reg.>)==<value>
E.g:
Break.Set P:0x1000 /Program /CONDition Register(R0)==0x42
Break.Set P:0x1000 /Program /VarCONDition \Register(R0)==0x42
两个命令之间的区别?第一个使用TRACE32表达式,其中符号代表它们的地址(就像链接器看到符号一样)。第二个使用所谓的HLL表达式,其中符号代表C / C ++语言中的变量。 (HLL expr。== C-style expr。)
通常在HLL表达式中编写条件更容易(特别是当它们处理变量时),而在TRACE32表达式中使用PRACTICE函数通常更容易。
您还可以在Break.Set对话框中设置条件:单击按钮&#34;高级&#34;然后你在现场的条件&#34; CONDition&#34;。字段右侧的HLL复选框&#34; CONDition&#34;定义您是否使用HLL表达式。