# 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 x86 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](../qemu.md) for
documentation on debugging zircon with QEMU+GDB.
