2012年10月18日木曜日

Android X86 Debug Howto

This page explains how to use adb and gdbserver with VirtualBox
1. use adb:

In the VirtualBox network configuration, it is simplest to configure it for Host-Only or Bridged.
boot up Android iso image on the VirtualBox.
setup ethernet (normally, it will do DHCP by default)
find the IP address of the android VM, by going to the console <Alt-F1> and then typing: netcfg
you can go back to the UI by pressing <Alt-F7>
on you host machine, cd <android source code root directory>/out/host/linux-x86/bin/
./adb kill-server
./adb connect <VirtualBox IP address>:5555, after this command, you should see something like below
* daemon not running. starting it now *
* daemon started successfully *
connected to <VirtualBox IP address>:5555
./adb logcat to dump the debug log
2. using adb with a NAT'ed VM

The steps above work nicely if you have a VM which is set up to use Bridged or Host-Only adapters
However, if you have a NAT'ed VM you cannot connect to the VM IP from the host
You will need to set up port forwarding for a host port to be forwarded to the VM port 5555 (which is adb)
VBoxManage modifyvm <VMName> --natpf1 adb,tcp,*,<localport>,*,5555
Example from one machine:
VBoxManage modifyvm froyo --natpf1 adb,tcp,*,5555,*,5555
Once this is done, you should see the local port (i.e. 5555 in this case) bound on the host via netstat -a
You can now connect to the VM by adb localhost:5555

3. how to use gdb with gdbserver:

Android-x86 comes with a preinstalled gdbserver. And you can find it in /sbin/gdbserver. To use gdb to debug your process, you need to:
set up host-only network as mentioned earlier
in the terminal emulator, run su
in the terminal emulator, run gdbserver <VirtualBox ip address>:1234 [application binary name with the path] or [--attach pid]
on your host machine, run gdb [path of your application binary]
gdb > target remote <VirtualBox ip address>:1234
gdb > set solib-search-path <the path to all the shared library binaries>
gdb > c
4. Stop zygote to run automatically:

in the vendor/asus/eeepc/init.rc, change following lines
service zygote /system/bin/app_process -Xzygote /system/bin --zygote --start-system-server
socket zygote stream 666
onrestart write /sys/android_power/request_state wake
onrestart write /sys/power/state on

to:

service zygote /system/bin/app_process -Xzygote /system/bin --zygote --start-system-server
socket zygote stream 666
onrestart write /sys/android_power/request_state wake
onrestart write /sys/power/state on
disabled
oneshot

To start zygote manually just do "start zygote" from the command line.

0 件のコメント:

コメントを投稿