blob: 316faad4dca76e90f78132f6e80a1f7232c04257 [file] [log] [blame] [view]
# 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