blob: 3a85b6e8bd42085e66f048a5b716f8f8a8adf52e [file] [view]
# Driver Debug CLI (`debug`)
`debug` is a command-line utility for interacting with drivers that implement the
[`fuchsia.driver.debug.Debug`](/sdk/fidl/fuchsia.driver.debug/debug.fidl) FIDL protocol.
It allows developers to discover supported debug commands on target drivers and execute them
with arbitrary arguments, streaming stdout and stderr back to the terminal.
## How it works
Drivers that implement the debug protocol serve `fuchsia.driver.debug.Debug` in their outgoing
service directory (e.g. `/out/svc/fuchsia.driver.debug.Debug`).
The `debug` binary connects to the debug protocol, binds stdout and stderr to Fuchsia sockets,
and sends execution requests to the driver via the `Execute` FIDL method. It can also query
the driver's list of registered commands via `ListCommands`.
### Default Path Resolution
When `debug` is run without specifying a custom path:
1. It first checks for the existence of `/out/svc/fuchsia.driver.debug.Debug`.
2. If not found or connection fails, it falls back to `/svc/fuchsia.driver.debug.Debug`.
This makes `debug` work seamlessly inside `ffx component explore` without needing to specify
any service paths.
## Usage with `ffx component explore`
The recommended and primary way to use `debug` is via `ffx component explore <driver_moniker>`.
In an explore container, the target driver component's outgoing directory is mounted directly
at `/out`. Because `debug` automatically checks `/out/svc/fuchsia.driver.debug.Debug`, no path
flags are necessary.
### 1. Interactive Exploration
Launch an interactive explore shell on the driver component:
```bash
ffx component explore bootstrap/boot-drivers:dev.sys.platform.00_00_2d
```
Inside the explore shell:
```bash
# List available debug commands supported by the driver:
$ debug --list-commands
# or
$ debug list-commands
# Execute a command:
$ debug ping
$ debug reset --hard
```
### 2. Non-interactive (One-off) Execution
You can run debug commands directly from your host workstation using `ffx component explore --command`:
```bash
# List supported debug commands:
ffx component explore <driver_moniker> --command "debug --list-commands"
# Execute a specific command:
ffx component explore <driver_moniker> --command "debug ping"
```
## Command Line Options
```text
Usage: debug [-s <service>] [--list-commands] [args...]
Debug CLI tool to interact with drivers via fuchsia.driver.debug.Debug. This
tool is typically invoked inside an explore shell on a driver component: `ffx
component explore <driver_moniker>` or non-interactively via: `ffx component
explore <driver_moniker> --command "debug ..."` Inside `component explore`, the
driver's outgoing directory is mounted at `/out`, allowing `debug` to connect to
`/out/svc/fuchsia.driver.debug.Debug` by default.
Options:
-s, --service path to the fuchsia.driver.debug.Debug service node.
Defaults to `/out/svc/fuchsia.driver.debug.Debug` or
`/svc/fuchsia.driver.debug.Debug`.
--list-commands list all available debug commands supported by the driver.
--help, help display usage information
```
### Custom Service Path
If the driver's debug protocol is exposed at a non-standard path or in a client component's incoming
namespace (`/svc/...`), pass `-s` or `--service`:
```bash
debug -s /custom/path/to/fuchsia.driver.debug.Debug --list-commands
debug -s /custom/path/to/fuchsia.driver.debug.Debug ping
```