[linux-users: 108981] QEMUで実行しているLinuxカーネルをDDDでデバッグするときブレークできない
柳原光佑
yanagihara.kosuke @ gmail.com
2015年 1月 15日 (木) 14:42:36 JST
はじめまして、柳原と申します。
このMLで良いか確信がないですが、ご助言いただけますと幸いです。
QEMU上で起動したLinuxカーネルをDDD(GDB)でデバッグしようとしているのですが、
設定したブレークポイントで止まってくれず困っています。
正確にはそのLinuxカーネルはAndroidのカーネルであり、GoogleのサイトからDLしました。
https://android.googlesource.com/kernel/goldfish.git
ここで言うQEMUはAndroid用にカスタマイズしたエミュレータで、Androidのソースに付属していました。
以下に基本情報と実施した操作を記します。
使用するツールはこれで適切か、設定に不備がないかをご教示ください。
また、不足している情報がありましたらご指摘お願いいたします。
<基本情報>
HostOS: Ubuntu14.04 64bit LTS
GCC: 4.8.2
Make: 3.8.1
QEMU: 0.10.50Android
DDD: 3.3.12
GDB: 7.7.1
Linux Kernel: 2.6.29
<操作>
●ターゲットをARMに指定して、ビルドオプションを設定してカーネルをビルド
$ export ARCH=arm
$ export SUBARCH=arm
$ export CROSS_COMPILE=arm-eabi-
$ make goldfish_armv7_defconfig
$ make menuconfig
Linux Kernel Configuration
Kernel hacking
[Y]Compile the kernel with debug info
$ make -j8
●Androidエミュレータ(QEMU)をデバッグオプションを付けて起動
$ emulator -kernel goldfish/arch/arm/boot/zImage -qemu -s -S
●DDDを起動しQEMUに接続
$ DDD vmlinux
GNU DDD 3.3.12 (x86_64-pc-linux-gnu), by Dorothea LReading symbols from
vmlinux...done.
(gdb) target remote localhost:1234
Remote debugging using localhost:1234
warning: Architecture rejected target-supplied description
Could not fetch register "st2"; remote failure reply 'E14'
0x00000000 in ?? ()
●ブレークポイントをstart_kernel()に設定
(gdb) b start_kernel
Breakpoint 1 at 0xc00086a4: file init/main.c, line 531.
(gdb) continue
Continuing.
Program received signal SIGTRAP, Trace/breakpoint
trap.#←SIGTRAPが発行され、設定した以外の場所でブレイクする
0x00021d78 in ?? ()
(gdb)
●一度SIGTRAPを受けると、ブレークポイントを外さない限り他の操作が受け付けられない
(gdb) next
Cannot find bounds of current function
(gdb) step
Cannot find bounds of current function
(gdb) continue
Continuing.
Program received signal SIGTRAP, Trace/breakpoint
trap.#←SIGTRAPが発行され設定した以外の場所でブレイクする。
0x00021d78 in ?? ()
(gdb)
-------------- next part --------------
HTML$B$NE:IU%U%!%$%k$rJ]4I$7$^$7$?(B...
URL: <http://listserv.linux.or.jp/pipermail/linux-users/attachments/20150115/95b048a4/attachment-0001.html>
linux-users メーリングリストの案内