C語言 實用除錯技巧

2021-10-22 18:30:59 字數 2315 閱讀 3274

如何寫出好(易於除錯)的**

程式設計常見的錯誤

debug 通常稱為除錯版本,它包含除錯資訊,並且不作任何優化,便於程式設計師除錯程式。

release 稱為發布版本,它往往是進行了各種優化,使得程式在**大小和執行速度上都是最優的,以便使用者很好地使用。

int main()

; printf("%p\n", arr);

printf("%p\n", &i);

環境下 <=10 就死迴圈了

//gcc 編譯器 <=11 就死迴圈了

//vs2013 <=12 死迴圈

for (i = 0; i <= 12; i++)

system("pause");

return 0;

}

死迴圈的原因:

main函式建立了i和arr是區域性變數,儲存在棧區,i在高位址建立,arr在i的低位址建立,所以在使用的過程中產生越界,可能arr會遇到i

棧區的預設使用

先使用高位址處的空間,在使用低位址處的空間

陣列隨著下標的增長,位址是由低到高的變化

啟動除錯,經常用來直接調到下乙個斷點處。

建立斷點和取消斷點 斷點的重要作用,可以在程式的任意位置設定斷點。這樣就可以使得程式在想要的位置隨意停止執行,繼而一步步執行下去。

逐過程,通常用來處理乙個過程,乙個過程可以是一次函式呼叫,或者是一條語句。

逐語句,就是每次都執行一條語句,但是這個快捷鍵可以使我們的執行邏輯進入函式內部(這是最常用的)。

開始執行不除錯,如果你想讓程式直接執行起來而不除錯就可以直接使用。

**執行正常

bug很少

效率高可讀性高

可維護性高

注釋清晰

文件齊全

使用assert

盡量使用const

養成良好的編碼風格

新增必要的注釋

避免編碼的陷阱

//void my_strcpy(char* dest, char* src)

//// *dest = *src;//'\0'

//}//void my_strcpy(char* dest, char* src)

//// }

//}#include char* my_strcpy(char* dest, const char* src)

return ret;

}int main()

注意:

分析引數的設計(命名,型別),返回值型別的設計

這裡講解野指標,空指標的危害。

assert的使用,這裡介紹assert的作用

引數部分 const 的使用,這裡講解const修飾指標的作用

注釋的新增

const int num = 10;

int n = 100;

int * p = #

// const int * p = #

// int * const p = #

// const 放在指標變數的*左邊時,修飾的是*p,也就是說:不能通過p來改變*p(num)的值

// const 放在指標變數的*右邊是,修飾的是指標變數p本身,p不能被改變了

*p = 20;

p = &n;

printf("%d\n", num);

結論:const修飾指標變數的時候:

const如果放在*的左邊,修飾的是指標指向的內容,保證指標指向的內容不能通過指標來改變。但是指標變數本身的內容可變。

const如果放在*的右邊,修飾的是指標變數本身,保證了指標變數的內容不能修改,但是指標指向的內容,可以通過指標改變.

int my_strlen(const char *str)

return count;

}int main()

編譯型錯誤

直接看錯誤提示資訊(雙擊),解決問題。或者憑藉經驗就可以搞定。相對來說簡單。

鏈結型錯誤

看錯誤提示資訊,主要在**中找到錯誤資訊中的識別符號,然後定位問題所在。一般是識別符號名不存在或者拼寫錯誤。

執行時錯誤

借助除錯,逐步定位問題。最難搞。

實用C語言技巧

c語言常常讓人覺得它所能表達的東西非常有限。它不具有類似第一級函式和模式匹配這樣的高階功能。但是c非常簡單,並且仍然有一些非常有用的語法技巧和功能,只是沒有多少人知道罷了。指定的初始化 很多人都知道像這樣來靜態地初始化陣列 int fibs c99標準實際上支援一種更為直觀簡單的方式來初始化各種不同...

C語言實用知識 字元

int isalpha int ch 若ch是字母 a z a z 返回非0值,否則返回0。int isalnum int ch 若ch是字母 a z a z 或數字 0 9 返回非0值,否則返回0。int isdigit int ch 若ch是數字 0 9 返回非0值,否則返回0。int islo...

python實用教程 Python語言實用教程

出版說明 前言第1章 python概述 1.1 程式語言簡介 1.2 python語言簡介 1.2.1 python發展歷史 1.2.2 python特點 1.2.3 python應用場合 1.3 安裝python 1.3.2 unix和linux平台安裝python 1.3.3 在windows平...