《DEBUG HACKS》中文版筆記(一)

2021-07-11 04:03:17 字數 2058 閱讀 7293

本書的讀者物件主要是用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的時候等待當前開啟...