TRACE32

您所在的位置:网站首页 trace软件 TRACE32

TRACE32

2024-01-20 15:40| 来源: 网络整理| 查看: 265

TRACE32——高级断点的设置和应用

高级断点最主要的两个应用场景就是:条件断点和组合断点。

条件断点的意思是指,在普通断点(如,程序断点、读写断点)的基础上额外限定一些条件:比如,某个变量满足特定的值,某个寄存器等于特定的值,或者程序断点命中的次数累加到一定的值,等等。

下面我们就来看一下如何设置这样的断点:

使用C/C++语法设置断点条件

图片

我们在CONDition框设置的时候,如果勾选了HLL选项,那么条件设置时,需要使用HLL高级语言(C/C++)的语法格式

(mstatic1==12)&&(mcount>200)

设置好后,我们运行程序,可以发现在TRACE32软件右下角,会一直出现**S**

这表明该断点是侵入式(Intrusive)断点。

图片

侵入式(Intrusive)断点的意思是指,程序运行过程中会被不断暂停,暂停下来判断条件是否满足。如果不满足,程序继续运行;如果满足条件,则断点生效,程序完全停下来。

图片

使用TRACE32 语法设置断点条件

如果我们在CONDition框设置的时候,没有勾选HLL选项,那么条件设置时,需要使用TRACE32的语法格式。上面例子中的语法需要改写成

(Var.value(mstatic1)==12.)&&(Var.value(mcount)>200.)

使用TRACE32语法格式的好处是我们可以借助于TRACE32提供的多种函数,来设定更加多样化的条件。例如,寄存器R1的值等于0x0

Register(R1)==0x0

图片

图片

设置循环计数(Count)条件

在调试时,我们还会遇到另一种常用的情形:希望当一个循环体循环了特定的次数后,触发程序暂停。这就需要在TRACE32中设置COUNT条件了。

如下图,同样地,先设置一个基础断点,即sieve函数入口处设置一个程序断点,sieve函数是在一个循环体里,我们希望sieve函数被循环运行了300次后,暂停下来:

图片

设置好后,我们运行程序,可以发现Break.List窗口中,count值一直在累加,当到达300的时候会把程序完全停下来。

图片

设置ProgramPass或者ProgramFail条件

最后,我们来了解一下ProgramPass和ProgramFail断点。该类型的断点必须设置在一个分支指令处,如下图的BEQ指令(相等则跳转)、BGT指令(大于则跳转)、LDREQB指令(Load Byte if Equal)等等。

图片

设置好后,运行程序,程序每次运行到该断点处,都会停下来,判断相应的状态标志位,来确认条件是否满足,如果不满足,则继续运行;如果满足,就把程序完全停下来。

图片

基于条件断点和后续行为的组合断点 请添加图片描述 请添加图片描述 请添加图片描述 请添加图片描述 请添加图片描述 请添加图片描述 请添加图片描述



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3