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