TRACE32 |
您所在的位置:网站首页 › trace软件 › TRACE32 |
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 |