很多的朋友,在寫代碼的時候經常運行出錯然而卻找不到哪裡錯了。那就是你沒有學會分析錯誤,你到底錯在哪裡了?為什麼錯了?
下面我們就來講講幾種場景:
第一種代碼致命錯誤:
一般的錯誤代碼在編譯器的編譯的的時候就會在下方或某個輸出框裡輸出你那裡存在錯誤,這個時候你就要根據提示去找到錯誤的源點,去分析你那裡錯了?為什麼錯了?(經常總結是一個好習慣)。一般代碼上的錯誤都能夠通過編譯器的提示,在對應的地方找到錯誤然後修改。 還有一種錯誤叫做邏輯錯誤。這種錯誤編器是不能直接幫助你找出來的。也就是編譯通過,但是你在執行的時候就會發生中斷。這個時候沒有編譯器直接給你指錯誤的源點,你怎麼去尋找錯誤呢?第一你就要想到你的代碼沒有致命錯誤。
第二你肯定是犯了邏輯錯誤:
邏輯錯誤就需要你去訊尋找哪一步的邏輯錯誤了?然後更改過來! 解決邏輯錯的方式你可以自己仔細的去檢查你的代碼,看是否寫的和你想的一樣,但是這種方法只針對於代碼量小,邏輯層次少的代碼。對於代碼量很大的代碼來說這種方法根本不可能找出你的錯誤。這個時候就需要到一種方式:調試(DEBUG).調試和我們的運行類似,只是他會把你想看到的那部分代碼在運行過程中顯示出來,這時候系統會把運行權利交還到你的手中,由你自己來操作代碼的運行,這個時候你就可以一步一步的跟著代碼走,同時你要對應你自己的想法,看看每一步代碼是不是像你想象那樣運行到對應的代碼上去的。簡單邏輯錯誤,當你在調試的過程中,遇到哪裡就會中斷,這個時候你也就知道到底是那一句代碼哪裡出錯了。但是對於複雜一點的代碼你就需要不停地運行,看看是不是卡死在那個循環或者那個地方了,這樣就能很快捷的找到你錯誤的地點,以便於你去及時的改正!
下面演示一下簡單邏輯錯誤調試(我用的編譯器為VS2010不同的編譯器可能控件不一樣,但是運行步驟都是一樣的):
第一種錯誤簡單邏輯錯誤(少了某些東西,但是編譯能夠通過,運行失敗:
#include<stdio.h>
int main()
{
int iNumber;
scanf("%d",iNumber);
printf("%d",iNumber);
return 0;
}
//編譯通過,但是在運行時出錯:
第一步:我們在程序入口後的第一句執行代碼出設置斷點(斷點:即系統交還控制權的第一句代碼位置處):
當斷點設置成功後在哪一句代碼的前方會出現一個小紅點(不同的編譯器可能顯示的圖案不一樣,但是都會有一個標識的)。同一段代碼可以設置多個斷點。
第二步:開始執行斷點後的代碼(對於我的編譯器是(F10下一步(逐過程),F11下一步(逐句)) 他們的區別是,逐句就是每一句代碼都是一步一步的走,當你運行到函數時,他會進入到函數體內接著運行顯示內部代碼。而逐過程就是當運行到函數是不會進入到函數體內顯示運行過程代碼。一般用F10 當遇到函數時用F11 :
打開調試:
在這個小紅點內有一個黃色的箭頭,這個箭頭指向的就是下一句將要執行的代碼。
反覆按F10直到系統報錯:
這個時候系統報錯了,箭頭指向的那一句代碼就是有問題的代碼。我們回到源代碼去看看那一句代碼我們忽略了什麼。
原來是我們在讀取的時候少了一個‘&‘符。觸犯了我在論代碼規範的重要性裡面的代碼書寫規範了。修改過來再運行:
這樣我們就完成了一次DEBUG,採用此方法可以解決很多你意想不到的錯誤。
希望對你有所幫助 ——Scarecrow
閱讀更多 Scarecrow 的文章