原文連接:http://www.orlion.ga/762/數組
1、單步執行和跟蹤函數調用函數
對於如下程序ui
最後打印出的結果是55和5105,而第二個結果應該是5050。如今用gdb調試下。調試
在編譯時要加上-g選項生成的目標文件才能用gdb進行調試,-g做用是在目標文件中加入源代碼的信息,好比目標文件第幾行機器指令對應源代碼的第一行,但並非把整個源文件嵌入到目標文件中,因此在調試時必須保證gdb也能找到源文件。get
能夠用"list"命令從第一行開始列出源代碼:源碼
一次只列出10行,若是要繼續源代碼能夠輸入list,也能夠什麼都不敲直接回車,表示使用上一條命令。能夠"list 函數名"列出函數的源碼:it
使用"quit"退出gdb。io
使用"start"命令執行程序:編譯
這表示停在main函數中變量定義以後的第一條語句出等待咱們發命令,gdb列出這條語句表示它還沒執行而且要立刻執行,能夠用"next"指令控制程序一條條執行。變量
可使用"step"命令進入程序中執行,用"backtrace"命令查看函數調用的堆棧:
可見當前的add_range函數是被main函數調用的,main傳進來的參數是low=1, high=10.main函數的棧幀編號爲1,add_range的棧幀爲0.如今能夠用"info"命令查看add_range局部變量的值。若是想查看main函數的局部變量的值能夠先用"frame"命令選擇1號棧而後再查看局部變量:
(result數組中雜亂無章的數是由於未初始化的局部變量有不肯定的值)。用"step"或者"next"往下走,而後用"print"命令打印出局部變量sum的值。
可使用"finish"命令讓程序一直運行到從當前函數返回爲止。
2、斷點
可使用"break 行號"設置一個斷點,也能夠"break 函數名";
而後可使用"continue"命令繼續執行;
能夠設置多個斷點,可使用"info breakpoints"查看全部斷點,每一個斷點都有一個編號,能夠輸入指令"delete breakpoints 編號"刪除指定編號的斷點;
有時一個斷點暫時不想用能夠禁用而沒必要刪除:"disable breakpoints 編號",啓用:"enable breakpoints 編號"。
還能夠設置斷點在知足某個條件時才激活:"break 9 if sum != 0"。
3、觀察點
觀察點是當程序訪問某一存儲單元時中斷,若是咱們不知道某一存儲單元在哪裏被改動,這時候可使用觀察點,
命令:"watch 變量名",如"watch array[1]";"info watchpoints"查看設置了哪些觀察點。