1 除錯技巧
除錯之前,先要靜態查錯。
1.看演算法是否正確(其實應該是在編碼之前做的工作)
2.看有沒有筆誤(如i寫成j)
除錯一般是分幾個步驟的。先把開關r,s,q,i開啟!
1.建立測試資料(技巧見後面的文章),可以抄樣例資料
2.執行程式
3.如果結果正確,轉1(測試新的資料)或結束
4.根據結果先判斷可能的錯誤之處。如:
a.宕機 - 可能是range check error或指標指向錯誤的地方(前者不應該出現,因為...)
b.荒唐的結果(負數,很大的數等等):可能是子程式介面的問題,如結果忘記賦值,或者
忘記更新最優解了...
c.明顯的不可行解:重點檢查生成解/測試解的可行性的部分
d.解不是最優:如果是搜尋,重點檢查是否搜尋完全了...
...5.單獨測試最容易測試的子程式(input/output/簡單子程式)
6.開始單步除錯,多用watch,或編一段程式輸出中間結果(例如樹,因為watch不好看樹的內容)
7.利用斷點測試。其實我不是很常用斷點,而是在程式中加一段判斷語句來實現斷點的。
這個步驟用來除錯搜尋中的某乙個節點的處理等用單步很難除錯到的地方。
說了這麼多廢話,再推薦一篇**:
ioi2000國家集訓隊徐串的《論程式的除錯技巧》
2 常見錯誤
這個...每個人的常見錯誤都不同啊,因此大家要多總結。
我剛學電腦時就是錯誤不斷,例如:
1)i寫成j等(現在有時還要出現這樣的錯誤)
2,3)下面的過程**錯了?(兩個錯誤,n,a是全域性變數)
function findmax:longint;
vari:integer;
max:longint;
begin
for i:=1 to n do
if a[i]>max then max:=a[i];
end;
以下列舉一些常見的錯誤。
[錯誤1]
錯誤處理:很多語句本身就可能出錯,例如:
a:=b div c;
有可能c=0,那麼就要考慮這種情況。例如:
已知等比數列的a1和q,求sn,
如果寫:(假設qn=q^n)
s:=a1*(1-qn)/(1-q)
那麼q=1時就會出錯。有些例子並不是這麼顯然,例如解方程組的時候,
總之,這樣的語句要引起重視。
[錯誤2]
有的時候輸入是integer,但是運算結果可能超過這個範圍,導致runtime-error
大家注意我在《列舉》中的例題《離散函式》
[錯誤3]
很多時候是變數用重複了,特別是程式寫得比較長的時候。例如:
for i:=1 to 100 do
....
...for i:=1 to 10 do
.......
結果是死迴圈。
還有區域性變數遮蔽了全域性變數,例如全域性變數叫n,k等就容易重複。
演算法合集之《論程式的除錯技巧》
論程式的除錯技巧 關鍵字 除錯技巧 測試方法 測試用例設計 摘要 本文結合作者自身經驗,對競賽中程式的除錯技巧做了詳細的闡述和總結。在介紹了程式設計中常見的錯誤型別和整合環境的除錯工具之後,給出了一般除錯流程,並著重講述了其中的動態查錯技巧,做了一定的歸納。最後通過乙個除錯例項來體現本文所論述的除錯...
PLC程式的除錯方法
總體來說,plc的除錯分為兩個除錯過程 模擬除錯和現場除錯,但是在此之前,有乙個環節不能少,否則就可能發生問題,那就是對plc外部接線作仔細檢查,一定要保證外部接線的準確無誤。可以用事先編寫好的試驗程式對外部接線做掃瞄通電檢查來查詢接線故障。但是為安全著想,最好是將電路斷開,當確認接線無誤後再連線主...
現場除錯階段工作程式
4.7 檔案管理員在接到除錯報告後,應及時歸檔並記錄,且在兩個工作日內將影印件移交給售後服務部。5.實施要求 5.1 除錯出問題的,現場除錯人員應當積極主動的需求辦法,盡量在現場解決,力求本次除錯工作能成功結束 5.2 安裝施工現場負責人應當組織現場人員積極主動地配合現場除錯人員的除錯工作 5.3 ...