blob: d2c9aac3584effd3ee1c58e2832e207a9affdee4 [file] [log] [blame] [view]
# Debugger (zxdb)
Zxdb is a console debugger for native code compiled with DWARF symbols (C, C++
and Rust). The frontend runs on the host computer and connects to the on-device
`debug_agent`. This document describes how to set up these processes.
## Running the agent
The `debug_agent` is run on the target device along with the port number that
it should listen to for incoming client connections. Typically this command
will be run from a console after [ssh-ing](ssh.md) in to the system:
```
run fuchsia-pkg://fuchsia.com/debug_agent#meta/debug_agent.cmx --port=2345
```
## Connecting the client
The `zxdb` client program is run on the host computer. It can be connected to
the `debug_agent` via the interactive `connect` debugger command or it can
automatically connect based on a command-line flag. Both IPv4 and IPv6
addresses are supported (see [device discovery](device_discovery.md) to find
the address). The port should match the port number passed to the agent.
```
zxdb -c "[f370::5051:ff:1e53:589a%qemu]:2345"
```
### Connecting via a script
Scripts may want to automatically launch the agent and client automatically.
The script should wait for the port to be open on the target system before
launching the client. Automatic retry is not yet implemented in the client.
To clean up the debug agent gracefully when the client exits, pass the
`--quit-agent-on-exit` command-line flag to the client.
## Specifying symbol paths
The debugger expects unstripped ELF files to be available on the local host
system. Symbols on the target are not used. The location where the local build
stores symbols must be passed to the `zxdb` client.
Local symbols can be passed on the command line:
```
zxdb --symbol-path=/path-to-symbols
```
The path can be any of:
* An individual symbolized ELF file.
* An ids.txt file mapping build IDs to local files.
* A directory name. If the directory is a GNU-style symbol repo (see below),
symbols will be taken from the .build-id folder beneath it, otherwise the
directory will be searched (non-recursively) for symbolized ELF files.
GNU-style symbol repos are directories of any layout which contain a folder at
the root called .build-id. This folder contains the symbolized binaries
indexed by the binaries' build IDs. Often these are symlinks pointing to
various locations in the folder itself.
```
Multiple `--symbol-path` parameters may be specified if there are symbols in
more than one location. All locations will be searched.
Symbol locations can also be edited interactively in the client using the
global "symbol-paths" setting (see the interactive "get" and "set" commands).