初めて投稿させていただきます。
このフォーラムで適切か確信がないですが、ご助言いただけますと幸いです。
エミュレータ上で起動したAndroidカーネルをDDD(GDB)でデバッグしようとしているのですが、
設定したブレークポイントで止まってくれず困っています。
以下に基本情報と実施した操作を記します。
使用するツールはこれで適切か、設定に不備がないかをご教示ください。
また、不足している情報がありましたらご指摘お願いいたします。
<基本情報>
HostOS: Ubuntu14.04 64bit LTS
GCC: 4.8.2
Make: 3.8.1
Emulator(QEMU): 0.10.50Android
DDD: 3.3.12
GDB: 7.7.1
Android(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エミュレータをデバッグオプションを付けて起動
$ emulator -kernel goldfish/arch/arm/boot/zImage -qemu -s -S
●DDDを起動しエミュレータに接続
$ 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)
以上です。よろしくお願いします。