第七課 GDB除錯 下

2022-01-25 11:57:24 字數 1729 閱讀 1839

2.1 就像之前所說的沒有任何乙個程式設計師敢打包票自己寫的**是沒任何bug,bug總會有意無意的出現在我們眼前,當程式執行結果於我們預期結果不一樣的時候這時候我們就應該除錯,總的來說bug分為:語法錯誤、邏輯錯誤、硬體異常;

3.1 語法錯誤:一般情況下出現在編譯的時候會有提示編譯錯誤這時候我們就可以馬上定位檢視並解決;

3.2 邏輯錯誤:這種情況比較複雜有時候的邏輯錯誤是肉眼能看出來的,有時候是需要除錯就可以出來的,還有時候要經過多次除錯找到bug產生環境的時候才出來,也就是說正式環境跟除錯環境差別而增加除錯難度。

3.3 硬體異常:這種問題在一般的裝置是比較容易除錯,特別是在高階語言中可以異常捕獲,但是在低階語言是比較難點的!

接下來看看這幾種情況的除錯。

4.1.1 新建如下test.c檔案,並輸入:

#include int main(void)

4.1.2 編譯將會產生錯誤,提示在main函式中找不到print函式,修正下即可:

4.2.1 重新編寫test.c檔案,輸入如下:

#include int main(void)

printf("%s\n",reverse_str);

return 0;

}

4.2.2 編譯後執行檢視結果沒有任何輸出:

4.2.3 除錯程式:gdb test.c,並檢視行好打斷點,我們在第13行打斷點:

4.3.2 編譯執行報錯,提示段錯誤。接下來進行除錯跟蹤,這裡可以直接載入檔案執行,在段錯誤的地方會暫停,此時我們列印相關資訊檢視即可。

4.3.4 修改*p初始值即可,特別注意:有時段錯誤可能不在當前報錯會在以後**執行中導致錯誤。

4.4.1 檢視當前是否有core檔案,file size為0說明沒有:

4.4.2 此時沒就需要設定core檔案:

ulimit -c unlimited    #設定
4.4.3 直接執行程式回報段錯誤(core dumped),此時也會在當前目錄生成core檔案。開始除錯:gdb test core.268181

這個core檔案很有用,它會儲存之前的環境更有利於除錯,接近真實。這裡注意知識點core的檢視以及設定、載入除錯。    

C語言第七課

主要內容 結構體 很重要,掌握 一 結構體的宣告 結構體是一種比較靈活的資料型別,與oc要學的類很相似 結構體是一種自己定義的資料型別示例 struct 結構體名 student 定義乙個學生型別 由結構體型別修飾的變數,叫結構體變數 定義 struct 結構體名 變數名 示例 struct stu...

第七課 C變數

第七課c變數 7.1 c 變數介紹 變數是程式可操作的儲存區的名稱。c 中每個變數都有特定的型別,型別決定了變數儲存的大小和布局,該範圍內的值都可以儲存在記憶體中,運算子可應用於變數上。變數的名稱可以由字母 數字和下劃線字元組成。它必須以字母或下劃線開頭。大寫字母和小寫字母是不同的,因為c 是大小寫...

python第七課(集合)

set 集合是乙個無序不重複元素的集合 無序唯一 支援 union 聯合 intersection 交 difference 差 和 sysmmetric difference 對稱差集 等數 算 建立語法 set1 set 空 set1 set1 set 字典將取key key 唯一 set1 s...