王若楠+田野+馬玉峰+劉立士



摘 要: 針對單步調試法在程序調試中的重要作用,引用了一個具體的樣例,進行Matlab程序單步調試法的分析并逐步檢驗,根據運行結果與實際計算結果的比較,驗證了該方法在程序調試中的重要地位,并且該實驗結果還可以應用于復雜的算法驗證中,具有很大的實用意義。
關鍵詞: 程序調試;系統質量;運行結果;計算結果;單步調試法
中圖分類號: TN92?34 文獻標識碼: A 文章編號: 1004?373X(2015)15?0139?03
Single?step debugging method of Matlab program and instance analysis
WANG Ruonan, TIAN Ye, MA Yufeng, LIU Lishi
(School of Information Science and Engineering, Shenyang Ligong University, Shenyang 110159, China)
Abstract: A specific instance is cited and analyzed by using single?step debugging of Matlab program. The debugging method is verified step by step. In comparison with operation results and actual computation results, the important status of the proposed method in program debugging is verified. The experimental results can be applied in complicated algorithm verification. The method has great practical significance.
Keywords: program debugging; system quality; operation result; computation result; single?step debugging method
0 引 言
Matlab(Matrix Laboratory)作為一種高效的科學及工程計算語言,廣泛地應用于數學分析、自動控制、系統仿真、人工智能等領域[1?5]。
在Matlab應用中,程序調試是保證系統質量的關鍵步驟[6?7],其主要目的是發現程序中的錯誤并及時糾正。目前主要有直接調試和單步調試兩種方法。直接調試法主要應用于簡單的Matlab程序,如程序設計中的流程控制問題;當M文件很大或者M文件中含有復雜的嵌套時,則需要單步調試法對程序進行調試,文獻[8]采用單步調試法驗證信號處理指標和實時性是否滿足要求,文獻[9]針對現場故障,采用繼電保護應用軟件仿真驗證系統,進行單步跟蹤調試,準確判斷裝置保護程序邏輯正確性。
上述研究只是應用了單步調試方法,并沒有提到具體的調試步驟。因此,本文針對具體的樣例,進行了Matlab環境下程序的單步調試,該樣例可為復雜的Matlab程序設計提供依據和參考。
1 單步調試法
程序調試中常見的錯誤有以下三種:拼寫錯誤、語法錯誤與邏輯錯誤[1],Matlab會在程序運行出錯的時候提示是哪一行出現問題,但卻不能確定導致出錯的是哪一行,或者在運行過程中沒有報錯,但是得出的結果卻是不符合邏輯的。在這些情況下就需要單步調試解決問題。單步調式法具體可以由以下幾個步驟完成:
(1) 設置斷點;
(2) 程序運行到斷點時步進;
(3) 在斷點處查看所調試的變量是否與邏輯值相符;
(4) Step in,進入子程序,查看運行情況;
(5) 在子程序中步進或者直接跳出進入主程序。
2 樣例分析
以公式[y=110n=010n?P(A(z,x)=n)+n=11∞P(A(z,x)=n)]為例,其中復合函數[A(z,x)]服從泊松分布,即[P(A(z,x)=n)]的概率[10]為:
[P(A(z,x)=n)=(z?x)n?e-z?xn!] (1)
將式(1)代入樣例公式得:
[y=110y1+y2] (2)
其中:
[y1=n=010n?(z?x)n?e-z?xn!] (3)
[y2=n=11∞(z?x)n?e-z?xn!] (4)
仿真參數[z]設置為1,以[x=1]為例,使用單步調試法測試程序的正確性。圖1為該公式的主程序示意圖。
圖1 主程序
程序中的[s1(1,x)]和[s2(1,x)]分別對應公式中的[y1]和[y2]。
首先設置斷點,如圖2所示。
圖2 主程序斷點設置
單擊
圖3 泊松子程序
運行完這一步后,跳出子程序,回到主程序,此時程序的各參數運行結果如圖4所示。
此時,將[z=1,][x=1]與[n=0]代入式(3),得出此時[y1]的累加結果為[y1=0],此結果與上述程序運行結果相符,繼續測試當[n=1]時的結果。點擊
圖4 [n=0]時的運行結果
圖5 [n=1]時的運行結果
此時,將[z=1,][x=1]與[n=1]代入式(3),得出此時[y1]的累加結果如圖6所示。
圖6 [n=1]時的計算結果
此結果與上述程序運行結果相符,繼續測試當[n=2]時的運行結果。點擊
圖7 [n=2]時的運行結果
此時,將[z=1,][x=1]與[n=2]代入式(3),得出此時[y1]的累加結果如圖8所示。
圖8 [n=2]時的計算結果
此結果與上述程序運行結果相符,可以表明該主程序的第一部分是正確的。
繼續設置斷點,如圖9所示。
圖9 主程序第二次設置斷點
單步運行程序,當運行完一次后,各參數運行結果如圖10所示。
圖10 [n=11]時的運行結果
將[z=1,][x=1]與[n=11]代入式(4),得出此時[y2]的累加結果如圖11所示。
圖11 [n=11]時的計算結果
此結果與上述程序運行結果相符,繼續測試當[n=12]時的運行結果。點擊
圖12 [n=12]時的運行結果
將[z=1,][x=1]與[n=12]代入式(4),此時[y2]的累加結果如圖13所示。
圖13 [n=12]時的計算結果
此結果與上述程序運行結果相符,可以表明該主程序的第二部分是正確的。
綜合上述的分析,該程序的第一部分及第二部分對于每次累加后[y1]和[y2]的結果都是正確的,所以,其編寫是正確的。因此,該樣例成功運用單步調試法完成了本程序的測試,為后續大數量數據的運行提供了基礎。
3 結 論
通過以上實例的分析,驗證了單步調試法在程序測試中的重要作用。通過此方法,程序員可以通過Matlab搭建系統模型,利用Matlab軟件本身的計算優勢,在程序編譯過程中快速找到錯誤所在,提高編寫程序的效率,還可以應用于復雜的算法測控中,具有很強的實用價值。
注:本文通訊作者為田野。
參考文獻
[1] 許波,劉征.Matlab工程數學應用[M].北京:清華大學出版社,2000.
[2] 王向東,戎海武,文翰.數學實驗[M].北京:高等教育出版社,2004.
[3] 薛定宇,陳陽泉.高等應用數學問題的Matlab求解[M].北京: 清華大學出版社,2004.
[4] 黃忠霖.控制系統Matlab計算機仿真[M].北京:國防工業出版社,2004.
[5] 姜啟源,邢文訓,謝金星,等.大學數學實驗[M].北京:清華大學出版社,2005.
[6] 李建新,劉乃安,劉繼.現代通信系統分析與仿真[M].西安:西安電子科技大學出版社,2001.
[7] 劉志儉.Matlab應用接口用戶指南[M].北京:科學出版社,2000.
[8] 劉春.偽碼調相中斷連續波雷達信號處理系統的設計與實現[D].南京:南京理工大學,2010.
[9] 朱寧,吳崇昊,李志堅,等.一種繼電保護應用軟件仿真驗證系統的設計[J].電力自動化設備,2012,32(6):140?144.
[10] 毛用才,胡奇英.隨機過程[M].西安:西安電子科技大學出版社,2006.