0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

wsl+qemu+gdbでlinuxカーネルのデバッグ

Last updated at Posted at 2025-12-09

前回の環境構築を前提にして、カーネルのソースにブレークポイントを貼って止めるところまでいきます。

gdbのインストール

sudo apt install gdb

linuxの起動、gdbと接続

wslでlinuxフォルダに入り、以下のコマンドでQEMUからdebianを立ち上げます。

qemu-system-x86_64 -kernel arch/x86_64/boot/bzImage -drive file=(qcowファイルのパス),format=qcow2 -nographic -append "root=/dev/sda1 console=ttyS0" -s

最後の-sオプションが「gdbと接続する」「tcpのポート1234をlistenする」などの意味を持っているようです。(より明示的に指定するには-gdb tcp::1234などの書き方をします)1
また、起動してから即停止し、gdbからの接続を待つには上記コマンドに-S(大文字)オプションを追加します。

ここまできたら、もう一つwslを立ち上げます。スタートメニューから選んでもいいですし、windowsターミナルの三角ボタンから選んでも大丈夫です。
img_m.png

後で立ち上げた方をwsl「B」と呼びます。
wsl「B」でlinuxフォルダに移動し、以下のコマンドを実行します。

gdb vmlinux
...
Reading symbols from vmlinux...
(gdb) target remote:1234
(gdb) b bprm_execve
(gdb) c

vmlinuxがデバッグのためのシンボル情報で、これを読み込んだあとgdbと対話的に操作できます。
target remote:1234とすると、qemuのプロセスとtcp通信を行い、そのタイミングでQEMU側が停止します。
b (関数名)などとするとブレークポイントが貼れます。ここではプロセスをforkするときに(多分)呼び出されるbprm_execveにブレークポイントを貼る例を出しました。
cとするとcontinueします。

これでブレークポイントに止まったら成功です。

Windows側でVSCodeの利用

wsl上で、linuxフォルダで以下のコマンドを実行するとwindows上でVSCodeが立ち上がります。

code .

VSCodeに慣れている方はこれがやりやすいかもしれません。
ただ、ソースを開いてGUI上でブレークポイントを貼るには一工夫要りそうで、その方法は現状分かっていません。

わかっていないこと

  • VSCodeのGUI上でブレークポイントを貼る方法

最後までお読みいただきありがとうございました。

再現した環境

(前回記事参照)
GNU gdb (Ubuntu 15.0.50.20240403-0ubuntu1) 15.0.50.20240403-git

  1. QEMUのコマンドラインはこの辺を参照ください。https://www.qemu.org/docs/master/system/introduction.html
    私は(なぜか?)ここにたどりつくのに結構苦労してしまいました…。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?