Yes*_*mar 5 trace32 lauterbach
我想设置一个断点,当两个变量包含某个值时,该断点将停止我的应用程序。例如,当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)
Run Code Online (Sandbox Code Playgroud)
因此,CPU 在每次写入 x 或 y 时都会停止,但当不满足条件“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.
Run Code Online (Sandbox Code Playgroud)
这要好得多,因为它仅在正确的值写入 x 或 y 时停止 CPU,并且如果其他变量也具有正确的值,则保持停止状态。
| 归档时间: |
|
| 查看次数: |
1325 次 |
| 最近记录: |