gdb

原文連接: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"查看設置了哪些觀察點。

相關文章
相關標籤/搜索