# Debugging with GDB
The GNU DeBugger (GDB) (opens new window) comes installed with the compiler toolchain in the form of the
The debugger reads the debug symbols inside an ELF file to understand the static and dynamic memory layout of the PX4 firmware.
To access the PX4 autopilot microcontroller, it needs to connect to a Remote Target (opens new window), which is provided by a SWD debug probe.
The flow of information looks like this:
Developer <=> GDB <=> GDB Server <=> Debug Probe <=> SWD <=> PX4 Autopilot.
To start a debugging session you typically:
- Need a specialized SWD debug probe.
- Find and connect to the SWD debug port. You may need a debug adapter.
- Configure and start the debug probe to create a GDB server.
- Launch GDB and connect to the GDB server as a remote target.
- Debug your firmware interactively.
See the debug probe documentation for details on how to setup your debug connection:
- SEGGER J-Link: commercial probe, no built-in serial console, requires adapter.
- Black Magic Probe: integrated GDB server and serial console, requires adapter.
- STLink: best value, integrated serial console, adapter must be soldered.
We recommend using the J-Link with the Pixhawk Debug Adapter or the STLinkv3-MINIE with a soldered custom cable.
Once connected, you can use the usual GDB commands such as:
continueto continue program execution
runto start from the beginning
backtraceto see the backtrace
break somewhere.cpp:123to set a breakpoint
delete somewhere.cpp:123to remove it again
info localsto print local variables
info registersto print the registers
Consult the GDB documentation (opens new window) for more details.
To avoid having to type all commands to connect in GDB each time, you can write them into
# Next Steps
You've now connected the flight controller to an SWD debug probe!
The following topics explain how to start on-target debugging:
# Embedded Debug Tools
The Embedded Debug Tools (opens new window) connect several software and hardware debugging tools together in a user friendly Python package to more easily enable advanced use cases for ARM Cortex-M microcontrollers and related devices.
The library orchestrates the launch and configuration of hardware debug and trace probes, debuggers, logic analyzers, and waveform generators and provides analysis tools, converters, and plugins to provide significant insight into the software and hardware state during or after execution.