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

标签 arm trace32 lauterbach

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

有没有办法在trace32中做到这一点?条件的语法是什么?

最佳答案

您还可以在断点的情况下检查寄存器值。

但是,请注意,条件断点总是会干扰芯片的运行时行为。这意味着您的 objective-c PU 将始终停止在断点位置,然后调试器评估条件,如果不满足条件,则重新启动 CPU。 (请注意,“条件断点”与“数据断点”(将特定值写入特定位置)不同。数据断点在很多芯片上是非侵入性的(例如 Cortex-R))。

基本技巧是使用练习函数 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 表达式,其中符号代表其地址(就像链接器看到符号一样)。第二种使用所谓的 HLL 表达式,其中符号代表 C/C++ 语言中的变量。 (HLL 表达式。== C 风格表达式。)

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

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

关于arm - 在 Trace32 断点条件下使用寄存器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42234979/

相关文章:

trace32 - 使用寄存器值作为参数在断点上调用外部脚本

debugging - 如何衡量堆栈消耗的内存量?

trace32 - 命中断点时劳特巴赫执行脚本

c - Debian 上没有 stdint.h 文件

arm - 使用 arm v8 运行 32 位和 64 位操作系统

assembly - 编写自己的SVC调用ARM汇编

trace32 - 使用 Lauterbach Trace 查看函数运行时的图表

c - 如何使用 IAR 插入内存​​屏障?

trace32 - 检查劳特巴赫窗口命令行的状态

Lauterbach 调试器无法在特定函数中设置断点