1.初學者經過學習前面的Makefile知識,信心滿滿,內心覺得應該要好好學習不單掌握語言的編寫,也要學會相對應的工具調高開發效率。有時我們寫出來的代碼經過執行結果卻跟我們預期不一樣那怎么辦呢,這個時候就要調試了。說到調試有經驗的開發童鞋知道在windows下游大名鼎鼎的VS集成平臺,那么在linux下呢,特別是編寫C、C++有什么工具可以方便我們調試呢,這里我給大家推薦的就是GDB,它也是GNU的debugger,專門為調試而生的。
2知識點: 2.1gdb的大致分為以下功能:2.1.1.啟動程序;
2.1.2.可以在通過斷點進行調試;
2.1.3.在斷點住停止可以查看運行的狀況;
2.1.4.可以動態的改變執行的環境,包括系統環境,系統變量,局部變量等等;
2.2gdb相關命令說明2.2.1 file <filename>:加載可執行文件;;
2.2.2r:run的簡寫,表示運行程序,如果有斷點,會在第一個斷點出暫停;
2.2.3 l:list的簡寫,列出相關的函數代碼或者是行代碼(包括其他文件),好像最多10行吧,也可以使用l 1,10:指定顯示1到10行;
2.2.4b function或b num:b就是breakpoint的簡寫,表示在function函數是打斷點,或者是在num行號處打斷點,也可以在循壞中使用:b if i=10表示在循環中i=10的時候暫停;
2.2.5 d num:刪除編號從1開始的斷點,不指定則全部刪除;
2.2.6 s:執行下一句語句,Step Into (單步跟蹤進入),如果有函數則進入函數內部;
2.2.7 n:執行下一句語句,Step Over (單步跟蹤),如果有函數也不會進入函數內部;
2.2.8 p:PRint的簡寫,打印某個變量的值,也可以打印變量、數組地址,注意查看動態分配的數組使用:p arry@10,其中10為arry變量內存的長度,改變運行時的數據:p x=100;
2.2.9 ptype:查看變量的類型;
2.2.10 i:info的簡寫,可以顯示出好多信息;
2.2.11 q:quit的簡寫,表示退出當前命令;
2.2.12 help <name>:表示查看相關gdb命令的手冊說明;
2.2.13 until:退出當前函數;
2.2.14 finish:運行到當前函數結束前,如果偶返回值則提示返回值;
3原理:3.1在編譯的時候附加上調試信息(比如斷點,輸出調試信息等等),執行gdb調試,程序會按照調試信息順序執行有斷點的地方暫停,有調試信息輸出就輸出等等方便程序員調試程序,一遍觀察程序在運行的一切。下面通過創建一個簡單的例子來說明gcc編譯,gdb的啟動以及調試步驟。
4實踐:4.1.先創建一個簡單的gdbtest.c文件,內容如下:
#include <stdio.h>int main(void){ int a = 1; int b = 2; int c = a + b; printf("result :%d",c); return 0; }
4.2.編譯如下:
gcc -Wall -g gdbtest.c -o gdbtest #-g參數
4.3.啟動gdb,并加載gdbtest可執行文件:
gdb #直接在當前gdbtest.c目錄中鍵入gdb命令就會進入調試器file gdbtest #在gdb命令下輸入此命令加載文件,輸出Reading symbols from gdbtest ... done表示加載完成
4.4.使用命令l查看文件此時會列出代碼以及標記行好,記住行號或者函數名稱以便打斷點;
4.5.使用格式:b 函數(行號)打斷點,輸入命令:b main或者:b 3效果都是一樣!
4.6.使用r命令運行程序會在斷點處暫停,此時可以使用s命令執行下一步(n命令是函數也一并執行,s命令會進入函數內部),斷點出暫停后也可以使用c命令繼續執行,可以使用p打印變量信息查看相關變量:
4.7.也可以使用命令:disassemble main查看main函數的匯編代碼,這應用是更高級的技巧了!,當不需要調試要退出的時候使用q命令即可。
這節課就先講到這里,先了解下gdb以及簡單運動gdb做簡單的調試。明天繼續!!1
新聞熱點
疑難解答