日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

Linux系統(tǒng)中找出并解決程序錯誤方法( 四 )


您可以從命令行使用 gdb 程序(Free Software Foundation 的調試器)來找出錯誤 , 也可以從諸如 Data Display Debugger(DDD)這樣的幾個圖形工具之一使用 gdb 程序來找出錯誤 。您可以使用 gdb 來調試用戶空間程序或 Linux 內核 。這一部分只討論從命令行運行 gdb 的情況 。
使用 gdb program name 命令啟動 gdb 。gdb 將載入可執(zhí)行程序符號并顯示輸入提示符 , 讓您可以開始使用調試器 。您可以通過三種方式用 gdb 查看進程:
使用 attach 命令開始查看一個已經運行的進程;attach 將停止進程 。
使用 run 命令執(zhí)行程序并從頭開始調試程序 。
查看已有的核心文件來確定進程終止時的狀態(tài) 。要查看核心文件 , 請用下面的命令啟動 gdb 。

CODE:gdb programname corefilename
要用核心文件進行調試 , 您不僅需要程序的可執(zhí)行文件和源文件 , 還需要核心文件本身 。要用核心文件啟動 gdb , 請使用 -c 選項:

CODE:gdb -c core programname
gdb 顯示哪行代碼導致程序發(fā)生核心轉儲 。
在運行程序或連接到已經運行的程序之前 , 請列出您覺得有錯誤的源代碼 , 設置斷點 , 然后開始調試程序 。您可以使用 help 命令查看全面的 gdb 在線幫助和詳細的教程 。
kgdb
kgdb 程序(使用 gdb 的遠程主機 Linux 內核調試器)提供了一種使用 gdb 調試 Linux 內核的機制 。kgdb 程序是內核的擴展 , 它讓您能夠在遠程主機上運行 gdb 時連接到運行用 kgdb 擴展的內核機器 。您可以接著深入到內核中、設置斷點、檢查數(shù)據(jù)并進行其它操作(類似于您在應用程序上使用 gdb 的方式) 。這個補丁的主要特點之一就是運行 gdb 的主機在引導過程中連接到目標機器(運行要被調試的內核) 。這讓您能夠盡早開始調試 。請注意 , 補丁為 Linux 內核添加了功能 , 所以 gdb 可以用來調試 Linux 內核 。
使用 kgdb 需要兩臺機器:一臺是開發(fā)機器 , 另一臺是測試機器 。一條串行線(空調制解調器電纜)將通過機器的串口連接它們 。您希望調試的內核在測試機器上運行;gdb 在開發(fā)機器上運行 。gdb 使用串行線與您要調試的內核通信 。
請遵循下面的步驟來設置 kgdb 調試環(huán)境:下載您的 Linux 內核版本適用的補丁 。
將組件構建到內核 , 因為這是使用 kgdb 最簡單的方法 。(請注意 , 有兩種方法可以構建多數(shù)內核組件 , 比如作為模塊或直接構建到內核中 。舉例來說 , 日志紀錄文件系統(tǒng)(Journaled File System , JFS)可以作為模塊構建 , 或直接構建到內核中 。通過使用 gdb 補丁 , 我們就可以將 JFS 直接構建到內核中 。)應用內核補丁并重新構建內核 。
創(chuàng)建一個名為 .gdbinit 的文件 , 并將其保存在內核源文件子目錄中(換句話說就是 /usr/src/linux) 。文件 .gdbinit 中有下面四行代碼:

CODE:set remotebaud 115200
symbol-file vmlinux
target remote /dev/ttyS0
set output-radix 16
將 append=gdb 這一行添加到 lilo , lilo 是用來在引導內核時選擇使用哪個內核的引導載入程序 。

CODE:image=/boot/bzImage-2.4.17
label=gdb2417
read-only
root=/dev/sda8
append="gdb gdbttyS=1 gdb-baud=115200 nmi_watchdog=0"
清單 7 是一個腳本示例 , 它將您在開發(fā)機器上構建的內核和模塊引入測試機器 。您需要修改下面幾項:
CODE:best@sfb:用戶標識和機器名 。
/usr/src/linux-2.4.17:內核源代碼樹的目錄 。
bzImage-2.4.17:測試機器上將引導的內核名 。
rcp 和 rsync:必須允許它在構建內核的機器上運行 。

CODE:set -x
rcp best@sfb: /usr/src/linux-2.4.17/arch/i386/boot/bzImage /boot/bzImage-2.4.17
rcp best@sfb:/usr/src/linux-2.4.17/System.map /boot/System.map-2.4.17

推薦閱讀