| <!--* freshness: { reviewed: '2026-10-12' } *--> |
| |
| # Zxdb Console Commands (`zxdb/console/commands`) |
| |
| ## Overview |
| |
| `//src/developer/debug/zxdb/console/commands` implements individual console verb |
| commands for `zxdb`. Each `verb_*.h` header exposes a `Get*VerbRecord()` factory |
| returning a `VerbRecord` with command aliases, help text, switches, and |
| execution callbacks. |
| |
| ## Interface |
| |
| Public headers group verb records and helpers into these functional areas: |
| |
| - Target, connection, and status verbs (`verb_attach.h`, `verb_connect.h`, |
| `verb_detach.h`, `verb_new.h`, `verb_rm.h`, `verb_run.h`, `verb_run_test.h`, |
| `verb_status.h`, `verb_help.h`): `zxdb::kZirconMaxNameLength`, |
| `zxdb::GetAttachVerbRecord()`, `zxdb::GetConnectVerbRecord()`, |
| `zxdb::GetDetachVerbRecord()`, and `zxdb::GetNewVerbRecord()`. Also exposes |
| `zxdb::GetRmVerbRecord()`, `zxdb::GetRunVerbRecord()`, |
| `zxdb::GetRunTestVerbRecord()`, `zxdb::GetHelpVerbRecord()`, and |
| `zxdb::GetStatusVerbRecord()`. Also exposes `zxdb::GetConnectionStatus`, |
| `zxdb::GetFilterStatus`, `zxdb::GetJobStatus`, `zxdb::GetProcessStatus`, and |
| `zxdb::GetLimboStatus`. |
| - Execution control and stepping verbs (`verb_continue.h`, `verb_pause.h`, |
| `verb_step.h`, `verb_stepi.h`, `verb_next.h`, `verb_nexti.h`, `verb_finish.h`, |
| `verb_until.h`): `zxdb::GetContinueVerbRecord()`, |
| `zxdb::GetPauseVerbRecord()`, `zxdb::GetStepVerbRecord()`, |
| `zxdb::GetStepiVerbRecord()`, `zxdb::GetNextVerbRecord()`, |
| `zxdb::GetNextiVerbRecord()`, `zxdb::GetFinishVerbRecord()`, and |
| `zxdb::GetUntilVerbRecord()`. |
| - Breakpoint and watchpoint verbs (`verb_break.h`, `verb_watch.h`): |
| `zxdb::GetBreakVerbRecord()` and `zxdb::GetWatchVerbRecord()`. |
| - Stack, frame, and async backtrace verbs (`verb_backtrace.h`, |
| `verb_async_backtrace.h`, `verb_down.h`, `verb_stack_data.h`, |
| `verb_stack_usage.h`): `zxdb::GetBacktraceVerbRecord()`, |
| `zxdb::GetAsyncBacktraceVerbRecord()`, `zxdb::GetDownVerbRecord()`, |
| `zxdb::OutputFrameInfoForChange`, `zxdb::GetStackDataVerbRecord()`, and |
| `zxdb::GetStackUsageVerbRecord()`. Also exposes `zxdb::OneStackUsage`, |
| `zxdb::ThreadStackUsage`, and `zxdb::GetThreadStackUsage`. |
| - Memory, disassembly, and register verbs (`verb_disassemble.h`, |
| `verb_mem_analyze.h`, `verb_mem_read.h`, `verb_regs.h`): |
| `zxdb::GetDisassembleVerbRecord()`, `zxdb::GetMemAnalyzeVerbRecord()`, |
| `zxdb::kMemAnalyzeSizeSwitch`, `zxdb::kMemAnalyzeNumSwitch`, |
| `zxdb::ReadAnalyzeNumAndSizeSwitches(const Command&, |
| std::optional<uint32_t>*)`, `zxdb::kDefaultAnalyzeByteSize`, |
| `zxdb::GetMemReadVerbRecord()`, and `zxdb::GetRegsVerbRecord()`. |
| - Expression, variable, and symbol inspection verbs (`verb_locals.h`, |
| `verb_print.h`, `verb_libs.h`, `verb_sym_info.h`, `verb_sym_near.h`, |
| `verb_sym_stat.h`): `zxdb::GetLocalsVerbRecord()`, |
| `zxdb::GetPrintVerbRecord()`, `zxdb::GetLibsVerbRecord()`, |
| `zxdb::GetSymInfoVerbRecord()`, `zxdb::GetSymNearVerbRecord()`, and |
| `zxdb::GetSymStatVerbRecord()`. |
| |
| ## Invariants |
| |
| Verb implementations must preserve these invariants: |
| |
| - `kZirconMaxNameLength` is `31` (matching `ZX_MAX_NAME_LEN - 1`). |
| - Verb callbacks check allowed `Noun` combinations via `Command::ValidateNouns` |
| before acting on targets, threads, frames, or breakpoints. |
| - Thread stepping verbs (such as `step`) require a stopped thread with a valid |
| stack frame via `AssertStoppedThreadWithFrameCommand`. |
| - The `run` verb supports only Linux targets (`debug::Platform::kLinux`) and |
| returns an error on Fuchsia targets. |
| - Attaching by numeric process KOID rejects duplicate KOIDs in |
| `System::ProcessFromKoid` and rejects filter switches (`--job`, `--exact`). |
| Attaching via filters forbids the `process` noun. |
| - Hardware write and read-write watchpoint addresses must align to an even |
| multiple of their byte size. |
| |
| ## Side Effects |
| |
| Executing console verbs produces these session and console side effects: |
| |
| - Mutates debugger session and target state by attaching or detaching processes, |
| starting binaries, updating filters and breakpoints, and stepping threads via |
| `ThreadController` instances. |
| - Evaluates target expressions asynchronously and writes output or errors |
| through `CommandContext::Output` and `CommandContext::ReportError`. |
| - Updates active `ConsoleContext` selections (such as selecting newly created |
| breakpoints or active stack frames). |
| |
| ## Verification |
| |
| Run these commands to build and test `zxdb/console/commands`: |
| |
| - Build: `fx build //src/developer/debug/zxdb/console` |
| - Test: `fx test zxdb_tests` |