2017-08-08 67 views
1

基本上我有兩個斷點,比方說A和B.我爲自動化測試編寫了一個.cmm腳本,我想知道如何在斷點B之前到達斷點A.基於此推定有條件通過或未通過測試。下面的代碼只顯示是否達到了斷點。檢查首先到達哪個斷點。 trace32 toolbox lauterbach用於測試自動化

GO A 
    TOOLBOX WaitValidateBreakpoint A 
    ENTRY &StoppedAtBreakpoint 

    IF &StoppedAtBreakpoint==FALSE() 
    (
    TOOLBOX TestStepFail "Breakpoint A is not reached" 
    RETURN 
) 
    ELSE 
    (
    TOOLBOX TestStepPass "Breakpoint A is reached" 
    RETURN 
) 

GO B 
    TOOLBOX WaitValidateBreakpoint B 
    ENTRY &StoppedAtBreakpoint 

    IF &StoppedAtBreakpoint==FALSE() 
    (
    TOOLBOX TestStepFail "Breakpoint B is not reached" 
    RETURN 
) 
    ELSE 
    (
    TOOLBOX TestStepPass "Breakpoint B is reached" 
    RETURN 
) 
+0

TOOLBOX不是TRACE32的本機命令。我猜它是在你的CMM腳本的某個地方用'ON CMD TOOLBOX'或'GLOBALON CMD TOOLBOX'定義的。如果你想要一個基於TOOLBOX命令的解決方案,我想你也必須發佈它的定義。 – Holger

回答

1

由於問題描述,我假設現有的自動化腳本能夠檢測斷點A或B是否被命中。這是通過包含兩個斷點的地址2個實踐宏反射:

LOCAL &address_bp_a &address_bp_b 

兩個附加的實踐宏跟蹤哪些斷點第一觸發:

LOCAL &bp_a_first &bp_b_first 

&bp_a_first=FALSE() 
&bp_b_first=FALSE() 

腳本啓動該程序的執行和監視器,其斷點首先被觸發。發生其他斷點時,這種情況會在循環中發生:

WHILE !(&bp_a_first||&bp_b_first) 
(
    Go 
    WAIT !STATE.RUN() 

    IF Register(PC)==&address_bp_a 
    (
    &bp_a_first=TRUE() 
) 
    ELSE IF Register(PC)==&address_bp_b 
    (
    &bp_b_first=TRUE() 
) 
) 

IF &bp_a_first 
(
    PRINT "Breakpoint A was hit first" 
) 
ELSE IF &bp_b_first 
(
    PRINT "Breakpoint B was hit first" 
)