| # Debugging guest kernels with gdb |
| |
| Note: this feature is only available on android14-5.15 and newer host kernels. |
| |
| Starting with Android U it is possible to attach a gdb to the guest kernel, when |
| starting a debuggable and non-protected guest VM. |
| |
| You can do this by passing `--gdb <port>` argument to the `vm run`, `vm run-app` |
| and `vm run-microdroid` commands. The `crosvm` will start the gdb server on the |
| provided port. It will wait for the gdb client to connect to it before |
| proceeding with the VM boot. |
| |
| Here is an example invocation: |
| |
| ```shell |
| adb forward tcp:3456 tcp:3456 |
| adb shell /apex/com.android.virt/bin/vm run-microdroid --gdb 3456 |
| ``` |
| |
| Then in another shell: |
| |
| ```shell |
| gdb vmlinux |
| (gdb) target remote :3456 |
| (gdb) hbreak start_kernel |
| (gdb) c |
| ``` |
| |
| The [kernel documentation]( |
| https://www.kernel.org/doc/html/latest/dev-tools/gdb-kernel-debugging.html) has |
| some general techniques on how to debug kernel with gdb. |
| |
| ## Obtaining vmlinux for Microdroid kernels |
| |
| If you are debugging Microdroid kernel that you have built [locally]( |
| ../../microdroid/kernel/README.md), then look for `out/dist/vmlinux` in your |
| kernel repository. |
| |
| If you are debugging Microdroid kernel bundled with the `com.android.virt` APEX, |
| then you need to obtain the build ID of this kernel. You can do this by |
| checking the prebuilt-info.txt file in the |
| `packages/modules/Virtualization/microdroid/kernel/arm64` or |
| `packages/modules/Virtualization/microdroid/kernel/x86_64` directories. |
| |
| Using that build ID you can download the vmlinux from the build server via: |
| https://ci.android.com/builds/submitted/${BUILD_ID}/kernel_microdroid_aarch64/latest/vmlinux |