天天看點

在Linux的控制台中使用GDB調試程式

        由于目前的開發是在一個隻有Linux核心的特定 環境進行的,Java代碼可以通過遠端調試功能在Windows下進行Debug,而C代碼就沒有那麼幸運了。幸好有同僚推薦了GDB,并且教給我了幾個簡單的指令,發現極其友善,并且功能很強大——雖然隻是幾個簡單的指令,是整個調試過程變得妙趣橫生。下面是我在調試應用的幾個簡單指令及簡單過程。

        一、簡單的幾個指令:

        1、attach,綁定要調試程式的線程ID,形式:attach 9987

        2、dir,綁定運作程式的源檔案目錄,例如: dir /tmp

        3、b,設定斷點,形式:b filename:line,例如:b general_parser.c:5695,就是在general_parser.c檔案的第5695行設定斷點。

        4、advance,跳轉到某處, 形式:advance line

        5、display,顯示變量或者表達式的值,在單步調試時會一直顯示,形式:display expression

        6、cont,繼續執行,當運作到一個斷點時,使用該指令繼續向下執行到下一個斷點

        7、n,單步執行(Step over),每次執行一句,遇到函數調用時,不會進入到函數内部。如果前面使用display指令設定了要檢視的表達式,那麼就會在執行後顯示出來。

        8、s,單步跳入(Step into),也是每次執行一句,但是遇到函數調用時,會進入到函數内部。

        9、list,列出産生執行檔案的源代碼的一部分

       10、quit,退出

        二、簡單的調試過程

        1、啟動要調試的程式,并獲得其線程ID;

        2、啟動gdb程式;

        3、綁定調試程式的形成ID:

              gdb/>attach pid 

        4、設定斷點:

              gdb/>b general_parser.c:5695

        5、繼續運作:

              gdb/>cont

        6、設定要檢視的變量值:

              gdb/>display currentMsg

        7、繼續運作:

        8、等到預期輸入時,可以單步調試

              gdb/>n

        9、遇到函數調用,可以使用s進入,也可以使用advance直接跳轉某一行

              gdb/>advance 3617

        10、繼續單步執行

              gdb/>n

         11、退出gdb。

        當然上面的調試過程隻時我在工作中的簡單過程,并不具有普遍性,但是GDB幾個簡單的指令,的确是可以解決很大的問題。

        下面是一篇關于GDB的文章: