文章目錄
前言
一、GDB調試預備工作
二、GDB的啟動與退出
三、GDB中查看源代碼
四、GDB斷點操作
五、GDB調試指令
前言
在專欄【嵌入式Linux】應用開發篇_Linux打工仔的博客中,我們已經寫了大量的源程序。但是在調試這些程序時我們都是通過printf大法和肉眼除錯法。對于較大工程項目來說,這樣的調試效率低。因此,有必要學習GDB調試技巧,提升瞄準bug的能力和開發效率。若涉及版權問題,請聯系本人刪除!
一、GDB調試預備工作
【1】源程序:包含.c源文件和.h頭文件等。若工程較大,可以編寫Makefile文件來管理,并在Makefile文件中添加gcc指令的選項-g。
【2】調試選項:在采用gcc指令來編譯源程序時,加上-g選項來生成帶有源程序信息的可執行文件,用于調試。(因此,該可執行文件會比平常的文件大)
【3】其它選項:-Wall打開所有警告;-O0關閉編譯器優化。
【4】使用舉例:當前源文件為hello.c,那么執行以下指令就能生成用于gdb調試的可執行文件hello。
gcc hello.c -g -Wall -O0 -o hello
二、GDB的啟動與退出
【1】介紹:gdb是一個應用程序,但我們使用gdb? 可執行文件的指令就能創建gdb進程。打開gdb后,目標程序并未開始執行,需要我們輸入相關指令,如下所示:
【2】設置命令行參數:set? args? 參數1? 參數2 ...? ?注意:這里的參數是從argv[1]開始的。
【3】查看命令行參數:show args
【4】運行目標程序:run(簡寫為r)從main函數開始順序執行,若遇到斷點則停留。
【5】運行目標程序:start? ?停留在main函數的第一行代碼,往后執行需要輸入continue(簡寫為c)。
【6】退出gdb:quit? 簡寫為q。
三、GDB中查看源代碼
【1】查看當前文件代碼:list(簡寫為l)默認的當前文件為main函數文件,默認顯示10行
- 查看指定行號:list? 行號
- 查看指定函數:list? 函數名
【2】切換文件查看:切換到哪個文件,哪個文件就變成了當前文件
- 查看指定行號:list? 文件名:行號
- 查看指定函數:list? 文件名:函數名
【3】設置顯示行數:set? listsize? 行數
【4】查看顯示行數:show? listsize
四、GDB斷點操作
【1】設置普通斷點(當前文件):①break? 行號;②break? 函數名。break可以簡寫為b。
【2】設置普通斷點(其它文件):①b? 文件名:行號;②b? 文件名:函數名。
【3】設置條件斷點:b? 行號? if? 變量名=某個值。
【4】查看斷點信息:i? b? ?全稱是info break。
【5】刪除斷點:delete指令,簡寫為d。
- 刪除指定編號斷點:d? 斷點編號1? ...? 例如:d? 4 5 8? 就是刪除了編號為4、5、8的斷點。
- 刪除連續編號斷點:d? 斷點編號i-斷點編號j? 例如:d? 1-5? 就是刪除了編號為1、2、3、4、5的斷點。
【6】設置斷點無效:disable指令,簡寫為dis。
- 無效指定編號斷點:dis? 斷點編號1 ...
- 無效連續編號斷點:dis? 斷點編號i-斷點編號j
【6】設置斷點有效:enable指令,簡寫為ena。
- 有效指定編號斷點:ena? 斷點編號1 ...
- 有效連續編號斷點:ena? 斷點編號i-斷點編號j