Linux gdb除錯總結

2021-09-14 05:20:34 字數 1410 閱讀 3913

在windows作業系統下,我們的執行程式有兩個版本。

debug開發除錯版本

得到的可執行檔案.exe檔案相對較大,其中包含除錯資訊。且不做任何優化,未開發人員提供強大的應用除錯能力

release發行版本

檔案相對較小,不包含除錯資訊,並進行了各種優化,以期達到**最小和速度最優。為使用者的使用提供便利。

在linux作業系統下,我們通過gcc來完成**的編譯鏈結,命令:gcc -o main main.c 其生成的可執行檔案與release版本下生成的可執行檔案相像,均不包含除錯資訊,若想其包含除錯資訊,需要在其命令後加入命令-g,即gcc -o main main.c -g,此時生成的檔案即可進行除錯。linux下除錯需要借助除錯工具gdb。

gdb除錯總結

gdb除錯的物件:程序

1、進入除錯

命令gcc -o main mian.c -g,產生包含除錯資訊的可執行檔案main,

命令gdb main進入除錯模式

注意:輸入命令結束並按回車鍵後若顯示最後乙個單詞為done在進入除錯模式,否則,可能第一次命令未輸入-g導致未產生包含除錯資訊的可執行檔案。

2、顯示**以進行加斷點操作

命令 l

若**顯示不全則繼續輸入命令l/回車鍵,回車鍵為繼續執行上一次輸入的命令

斷點操作

加斷點 命令b 行號(l後顯示的行號)

顯示斷點資訊 命令info break

刪除斷點 delete 斷點編號(info break 後顯示的編號)

啟動除錯/執行程式

命令 r

除錯過程

單步執行 命令 n

進入函式 命令 s

退出函式 命令 finish

列印 命令 p 變數

繼續執行 命令 c (遇到斷點就會停止,如果想要越過斷點,需要delete刪除斷點)

顯示當前位置/函式呼叫棧資訊(關係) 命令 bt

退出除錯 命令 q

注意:若想退出死迴圈程序。按ctrl+c

除錯例項

在linux下建立普通檔案main.c,內容為:

#include

#include//

#include

int main()

;printf("input:\n");

fgets(buff,128,stdin);

if(strcmp(buff,"end")==0)

printf("read:%s\n",buff);

}printf("main over\n");

exit(0);

}除錯後,可以很明顯的發現其原因是在liunx環境下,在字元轉結尾會自動補\n標記,這不同於window下的\0標記,所以鍵盤輸入的「end」和**中比較的「end」無法匹配,需要將strcmp中進行匹配的「end」改為「end\n」。

Linux gdb除錯總結

進入除錯 1 輸入gdb 檔名 2 輸入gdb file 檔名 l 顯示源 預設顯示main函式所在檔案的源 list 檔名 num 顯示指定檔案指定行附近的源 b breakpoint的簡寫,設定斷點。b 行號 給指定行新增斷點 b 函式名 給指定函式新增斷點 b 檔名 行號 給指定檔案指定行新增...

linux gdb除錯彙編

1 除錯hello,要求編譯時指定了 gstabs選項 2 執行hello deepfuture lx deepfuture lx desktop private mytest hello hello,world abcd 3 用gdb開啟hello deepfuture lx deepfuture...

Linux gdb 除錯模式

linux gdb 除錯 編譯除錯版本的檔案 include g 啟動gdb除錯 若有main 有設定引數則可以在gdb下設定傳遞引數 set args gdb一些命令 1.run 執行整個程式 2.start 開始除錯 3.next n 逐條語句執行 4.step 逐條語句執行,並且嘗試進入函式內...