zxdb/console)//src/developer/debug/zxdb/console implements the interactive and non-interactive command-line interface (Layer 5) for zxdb. It handles CLI flag parsing, noun/verb tokenization and dispatch, active object tracking via ConsoleContext, input location resolution, and terminal formatting for frames, registers, and tables.
Public headers and subdirectories expose these console components:
console.h, console_impl.h, console_noninteractive.h, console_context.h): zxdb::Console, zxdb::Console::OutputObserver, zxdb::ConsoleImpl, zxdb::ConsoleNoninteractive, and zxdb::ConsoleContext (tracks active 1-based target/thread/breakpoint IDs and 0-based frame indices).command.h, command_parser.h, command_context.h, command_sequence.h, command_line_options.h): zxdb::Command, zxdb::CommandCallback, zxdb::DispatchCommand, zxdb::CommandContext, zxdb::ConsoleCommandContext, zxdb::OfflineCommandContext, and zxdb::NestedCommandContext. Also exposes zxdb::CommandToken, zxdb::TokenizeCommand, zxdb::ParseCommand, zxdb::FillCommandContextCallback, zxdb::GetCommandCompletions, zxdb::RunCommandSequence, zxdb::ReadCommandsFromFile, zxdb::CommandLineOptions, and zxdb::ParseCommandLine.nouns.h, verbs.h, switch_record.h): zxdb::Noun, zxdb::NounRecord, zxdb::GetNouns, zxdb::NounToString, zxdb::NounToRecord, zxdb::GetStringNounMap, zxdb::ExecuteNoun, zxdb::AppendNouns, and zxdb::GetNounSwitches. Also exposes zxdb::SourceAffinity, zxdb::Verb, zxdb::VerbRecord, zxdb::GetVerbs, zxdb::VerbToString, zxdb::GetVerbRecord, zxdb::GetStringVerbMap, zxdb::AppendSettingsVerbs, and zxdb::SwitchRecord.command_utils.h): zxdb::AssertRunningTarget, zxdb::AssertStoppedThreadWithFrameCommand, zxdb::AssertAllStoppedThreadsCommand, zxdb::CheckHexPrefix, zxdb::ReadUint64Arg, zxdb::ThreadStateToString, zxdb::ExecutionScopeToString, zxdb::ExecutionScopeForCommand, zxdb::ResolveBreakpointsForModification, zxdb::FormatBreakpoint, zxdb::FormatInputLocation, and zxdb::FormatInputLocations. Also exposes zxdb::GetEvalContextForCommand, zxdb::EvalCommandExpression, zxdb::EvalCommandAddressExpression, zxdb::RewriteCommandExpressionError, zxdb::FormatConsoleString, zxdb::GetNumberFormatForTarget, zxdb::GetRunnableTarget, zxdb::GetRunningProcesses, zxdb::VerifySystemHasRunningProcess, zxdb::ProcessCommandCallback, and zxdb::ScheduleAsyncPrintReturnValue.input_location_parser.h): zxdb::ParseGlobalInputLocation, zxdb::EvalGlobalInputLocation, zxdb::ParseLocalInputLocation, zxdb::EvalLocalInputLocation, zxdb::ResolveInputLocations, zxdb::ResolveUniqueInputLocation, and zxdb::CompleteInputLocation.format_frame.h, format_location.h, format_register.h, format_table.h, format_target.h): zxdb::FormatFrameOptions, zxdb::FormatStackOptions, zxdb::FormatStack, zxdb::FormatFrame, zxdb::FormatAllThreadStacks, zxdb::FormatLocationOptions, zxdb::FormatLocation, zxdb::FormatFileName, and zxdb::FormatFileLine. Also exposes zxdb::FormatRegisterOptions, zxdb::FormatRegisters, zxdb::FormatGeneralRegisters, zxdb::FormatGeneralVectorRegisters, zxdb::DescribeRegister, zxdb::Align, zxdb::ColSpec, zxdb::FormatTable, zxdb::FormatTarget, zxdb::FormatTargetList, and zxdb::TargetStateToString.attach, break, step, run, print, backtrace, and memory/symbol inspection) exposing VerbRecord descriptors.Callers and implementations must preserve these invariants:
Console maintains a global singleton pointer accessible via Console::get().Console::output_enabled_, Console::streaming_enabled_, and ConsoleImpl::input_enabled_ act as balanced reference counters. Each feature is active only when its counter is greater than 0.Command::targets_ is never empty for valid commands, and Command::target() asserts !targets_.empty().Command (frame(), thread(), breakpoint(), filter(), sym_server()) return non-null only when the command has exactly one instance of that noun.CommandContext is reference-counted and must stay alive across asynchronous command execution. Pending AsyncOutputBuffer instances hold a RefPtr<CommandContext>, and the completion callback runs when CommandContext destructs.ConsoleContext assigns 1-based user IDs to targets, threads, breakpoints, filters, and symbol servers (0 means none or invalid). Frame IDs use 0-based indices into the thread's backtrace.ConsoleContext always exists outside setup and teardown, whereas the active thread, breakpoint, filter, and symbol server may be null or 0.GetNouns() and GetVerbs() return static maps that never change after initialization.zxdb/console produces these terminal, file I/O, and session side effects:
ConsoleImpl watches stdin via debug::MessageLoop, writes formatted output to stdout, and reads and writes $HOME/.zxdb_history.Console::Output and CommandContext::Output register completion callbacks and hold RefPtr references to pending AsyncOutputBuffer instances until they finish.ConsoleContext observes Session, System, Target, Process, Thread, Breakpoint, Download, Component, and SettingStore. It updates active selections, evaluates display expressions on thread stop, and switches between Embedded and EmbeddedInteractive console modes.RunCommandSequence reads script files from disk and dispatches commands on Console in order until completion or the first error.ScheduleAsyncPrintReturnValue registers a PostStopTask on a stopped thread to evaluate and print function return values before normal stop handling.Run these commands to build and test zxdb/console:
fx build //src/developer/debug/zxdb/consolefx test zxdb_tests