Debugging Tips

Generating debug info

There are several make variables used to control the generation of debug info.

GLOBAL_DEBUGFLAGS

GLOBAL_DEBUGFLAGS specifies level of debug info to generate. The default is -g. A useful value for getting less debug info usable in backtraces is -g1.

BOOTFS_DEBUG_MODULES

BOOTFS_DEBUG_INFO_FILES allows one to specify which modules (apps,libs,tests) have their associated debug info included in the boot image.

The value is a comma-separated list of “module short names” which are generally parent_directory/module_directory. E.g., ulib/launchpad,utest/debugger Make-style patterns (%) are allowed, e.g., ulib/%,utest/debugger.

The default is empty (meaning none).

Debugging zircon applications with GDB

To debug zircon applications with GDB use gdbserver: https://fuchsia.googlesource.com/gdbserver

Adding debug info to boot image

By default the boot image does not contain debug info as it can require a lot of extra space. Adding debug info is useful when using tools like debuggers natively. Note that this does not apply to cross debugging where the debugger is running on separate machine. Adding debug info to the boot image is for when you are running debugging tools on zircon itself.

Example:

$ make -j10 zircon-pc-x86-64 BOOTFS_DEBUG_MODULES=ulib/%,utest/debugger GLOBAL_DEBUGFLAGS=-g1

This example will include in the boot image debug info files for all shared libraries and for the “debugger” test program. To reduce the amount of debug info to just that usable in backtraces GLOBAL_DEBUGFLAGS=-g1 is passed.

Debugging the kernel with QEMU+GDB.

See “Debugging the kernel with GDB” in QEMU for documentation on debugging zircon with QEMU+GDB.