每天學點GDB 12

2021-09-06 11:52:36 字數 1173 閱讀 8877

本文介紹在archlinux環境下,如何進行核心使用gdb配合qemu進行除錯。

1. 安裝qemu

2. 編譯linux kernel

選擇最新的核心版本,規避gcc編譯出錯的問題具體步驟如下

2.1 make mrproper

2.2 make arch=i386 menuconfig

選中kernel hacking->compile the kernel with debug info

2.3 make

3.編譯簡單的init程式

#include #include 

#include

int main(int argc, char**argv)

return0;

}

編譯生成init

#gcc -static -o init hello.c

4. 建立根檔案系統

dd

if=/dev/zero of=myinitrd4m.img bs=4096 count=1024

mke2fs -t ext3 myinitrd4m.img

mkdir -p rootfs/dev

mount -o loop myinitrd4m.img rootfs

mknod rootfs/dev/console c 5

1mknod rootfs/dev/ram b 10cp

init rootfs

umount rootfs

建立必要的目錄

裝置檔為了使用 command line 以及開機,我們需要新增三項裝置 console 、 null 以及 ttyama0 ,在 _install/dev 下鍵入

sudo mknod console c 5 1

sudo mknod null c 1 3

sudo mknod ttyama0 c 204 64

5. 執行核心

在乙個終端執行

在另乙個終端執行如下命令啟動gdb並除錯

#gdb vmlinux

gdb)target remote:1234

gdb)break start_kernel

gdb)c

開始核心除錯之旅吧

每天學點GDB(二)

預設情況下,日誌是沒有開啟的,所有的除錯資訊都會在螢幕中顯示,即預設是輸出到stdout中的。那麼有沒有可能將輸出到螢幕中的內容儲存到檔案裡呢。答案自然是肯定的,這裡面有個地方遇要注意一下子,具體會在下面的示例中提及。將日誌檔案開啟,不指定檔名的話,預設的檔名是gdb.txt。gdb set log...

每天學點GDB 2

在一中提到gdb最最基本的用法,在本節主要講述一下如何讓gdb在斷點處列印一下診斷資訊,但程式執行本身不會中斷。先稍微改一改源程式 include include int main int argc,char argv return 0 假設要在執行期間檢視i值的變化。如果是step by step...

每天學點GDB 3

預設情況下,日誌是沒有開啟的,所有的除錯資訊都會在螢幕中顯示,即預設是輸出到stdout中的。那麼有沒有可能將輸出到螢幕中的內容儲存到檔案裡呢。答案自然是肯定的,這裡面有個地方遇要注意一下子,具體會在下面的示例中提及。將日誌檔案開啟,不指定檔名的話,預設的檔名是gdb.txt gdb set log...