本書的讀者物件主要是用c/c++等程式語言進行開發的應用程式程式設計師和linux核心開發者。所有示例都使用linux。
本書內容:不僅包括對應用程式的除錯,也包括對作業系統(linux核心)的除錯。此外也會涉及gdb等偵錯程式的使用方法、轉儲檔案(dump)的檢視方法,crash的使用方法。
除錯流程:
1. 帶著除錯選項編譯、構建除錯物件。
2. 啟動偵錯程式(gdb)
- 設定斷點
- 顯示棧幀
- 顯示值
- 繼續執行
通過gcc的 -g 選項生成除錯資訊
$gcc -wall -02 -g 原始檔
$gdb 可執行檔名
出現gdb提示符:命令列顯示(gdb)
可在函式名和行號上設定斷點。斷點命令(break)可簡寫為b。
示例:
(gdb) b main
breakpoint 1 at 0x1231244123
其他格式:
break 函式名
break 行號
break 檔名:行號
break +偏移量
break *位址
如果不指定斷點位置,就在下一行**上設定斷點(未使用過)
設定好的斷點可以通過info break確認
執行用run命令開始執行,不加引數只執行run,就會執行到設定斷點的位置上暫停。
backtrace命令可以在遇到斷點而暫停執行時顯示棧幀。該命令簡寫為bt。此外,backtrace的別名還有where和info stack
格式:
backtrace或bt
backtrace full :不僅顯示棧幀,還要顯示區域性變數。
但是出現下圖init.c待理解
這個是編譯的時候沒有-g選項導致的
執行源**中一行的命令為next(簡寫為n)。執行時如果遇到函式呼叫,可能會想執行到函式內部,此時可以使用step命令
繼續執行
除錯時,可以使用continue命令繼續執行程式。程式會在遇到斷點後再次暫停執行,如果沒有遇到斷點,就會一直執行到結束。
待理解 watch跟蹤變數跟不上
這個也是沒有-g選項導致的
糾正後:
ser variable《變數》=《表示式》
(gdb) p options 7=
1(gd
b)se
tvar
iabl
eopt
ions
=0(g
db)p
rint
opti
ons 8 = 0
使用generate-core-file可以講除錯用的程序生成核心轉儲檔案
用gcore命令可以直接從命令列生成轉儲檔案:
gcore 『pidof emacs』
可以用於現場
attach到程序
要除錯守護程序等已經啟動的程序,或是除錯陷入死迴圈而無法返回控制台的程序時,可以使用attach命令
格式:
attach pid
(gdb) attach 17606
可以看到程序經過怎樣的呼叫途徑進入等待狀態。
值的歷史
通過print命令顯示過的值會記錄在歷史中,使用p $可以獲取上一次顯示的值
show value可以顯示最後10個顯示過的值
Apache Cookbook中文版筆記
1 serveralias p71 乙個虛擬主機可以配置多個網域名稱 2 apachectl graceful p17 重啟apache的時候等待當前開啟的活動連線完成操作後再關閉該鏈結 3 虛擬主機 基於網域名稱的虛擬主機 基於ip的虛擬主機 p73 基於ip servername的虛擬主機 p7...
Apache Cookbook中文版筆記
1 serveralias p71 乙個虛擬主機可以配置多個網域名稱 view plain servername www.maxthon.com serveralias www.maxthon1.com www.maxthon2.com 2 apachectl graceful p17 重啟apac...
Apache Cookbook中文版筆記
1 serveralias p71 乙個虛擬主機可以配置多個網域名稱 servername www.maxthon.com serveralias www.maxthon1.com www.maxthon2.com 2 apachectl graceful p17 重啟apache的時候等待當前開啟...