| // Copyright 2019 The Fuchsia Authors. All rights reserved. | |
| // Use of this source code is governed by a BSD-style license that can be | |
| // found in the LICENSE file. | |
| #include "src/developer/debug/zxdb/console/verbs.h" | |
| #include <lib/syslog/cpp/macros.h> | |
| #include "src/developer/debug/zxdb/console/commands/verb_aspace.h" | |
| #include "src/developer/debug/zxdb/console/commands/verb_attach.h" | |
| #include "src/developer/debug/zxdb/console/commands/verb_attach_job.h" | |
| #include "src/developer/debug/zxdb/console/commands/verb_auth.h" | |
| #include "src/developer/debug/zxdb/console/commands/verb_backtrace.h" | |
| #include "src/developer/debug/zxdb/console/commands/verb_break.h" | |
| #include "src/developer/debug/zxdb/console/commands/verb_clear.h" | |
| #include "src/developer/debug/zxdb/console/commands/verb_cls.h" | |
| #include "src/developer/debug/zxdb/console/commands/verb_connect.h" | |
| #include "src/developer/debug/zxdb/console/commands/verb_continue.h" | |
| #include "src/developer/debug/zxdb/console/commands/verb_detach.h" | |
| #include "src/developer/debug/zxdb/console/commands/verb_disable.h" | |
| #include "src/developer/debug/zxdb/console/commands/verb_disassemble.h" | |
| #include "src/developer/debug/zxdb/console/commands/verb_disconnect.h" | |
| #include "src/developer/debug/zxdb/console/commands/verb_display.h" | |
| #include "src/developer/debug/zxdb/console/commands/verb_down.h" | |
| #include "src/developer/debug/zxdb/console/commands/verb_enable.h" | |
| #include "src/developer/debug/zxdb/console/commands/verb_finish.h" | |
| #include "src/developer/debug/zxdb/console/commands/verb_handle.h" | |
| #include "src/developer/debug/zxdb/console/commands/verb_help.h" | |
| #include "src/developer/debug/zxdb/console/commands/verb_jump.h" | |
| #include "src/developer/debug/zxdb/console/commands/verb_kill.h" | |
| #include "src/developer/debug/zxdb/console/commands/verb_libs.h" | |
| #include "src/developer/debug/zxdb/console/commands/verb_list.h" | |
| #include "src/developer/debug/zxdb/console/commands/verb_locals.h" | |
| #include "src/developer/debug/zxdb/console/commands/verb_mem_analyze.h" | |
| #include "src/developer/debug/zxdb/console/commands/verb_mem_read.h" | |
| #include "src/developer/debug/zxdb/console/commands/verb_new.h" | |
| #include "src/developer/debug/zxdb/console/commands/verb_next.h" | |
| #include "src/developer/debug/zxdb/console/commands/verb_nexti.h" | |
| #include "src/developer/debug/zxdb/console/commands/verb_opendump.h" | |
| #include "src/developer/debug/zxdb/console/commands/verb_pause.h" | |
| #include "src/developer/debug/zxdb/console/commands/verb_print.h" | |
| #include "src/developer/debug/zxdb/console/commands/verb_ps.h" | |
| #include "src/developer/debug/zxdb/console/commands/verb_quit.h" | |
| #include "src/developer/debug/zxdb/console/commands/verb_quit_agent.h" | |
| #include "src/developer/debug/zxdb/console/commands/verb_regs.h" | |
| #include "src/developer/debug/zxdb/console/commands/verb_rm.h" | |
| #include "src/developer/debug/zxdb/console/commands/verb_run.h" | |
| #include "src/developer/debug/zxdb/console/commands/verb_stack.h" | |
| #include "src/developer/debug/zxdb/console/commands/verb_status.h" | |
| #include "src/developer/debug/zxdb/console/commands/verb_stderr.h" | |
| #include "src/developer/debug/zxdb/console/commands/verb_stdout.h" | |
| #include "src/developer/debug/zxdb/console/commands/verb_step.h" | |
| #include "src/developer/debug/zxdb/console/commands/verb_stepi.h" | |
| #include "src/developer/debug/zxdb/console/commands/verb_steps.h" | |
| #include "src/developer/debug/zxdb/console/commands/verb_sym_debug.h" | |
| #include "src/developer/debug/zxdb/console/commands/verb_sym_info.h" | |
| #include "src/developer/debug/zxdb/console/commands/verb_sym_near.h" | |
| #include "src/developer/debug/zxdb/console/commands/verb_sym_search.h" | |
| #include "src/developer/debug/zxdb/console/commands/verb_sym_stat.h" | |
| #include "src/developer/debug/zxdb/console/commands/verb_sys_info.h" | |
| #include "src/developer/debug/zxdb/console/commands/verb_until.h" | |
| #include "src/developer/debug/zxdb/console/commands/verb_up.h" | |
| #include "src/developer/debug/zxdb/console/commands/verb_watch.h" | |
| namespace zxdb { | |
| VerbRecord::VerbRecord() = default; | |
| VerbRecord::VerbRecord(CommandExecutor exec, std::initializer_list<std::string> aliases, | |
| const char* short_help, const char* help, CommandGroup command_group, | |
| SourceAffinity source_affinity) | |
| : exec(std::move(exec)), | |
| aliases(aliases), | |
| short_help(short_help), | |
| help(help), | |
| command_group(command_group), | |
| source_affinity(source_affinity) {} | |
| VerbRecord::VerbRecord(CommandExecutorWithCallback exec_cb, | |
| std::initializer_list<std::string> aliases, const char* short_help, | |
| const char* help, CommandGroup command_group, SourceAffinity source_affinity) | |
| : exec_cb(std::move(exec_cb)), | |
| aliases(aliases), | |
| short_help(short_help), | |
| help(help), | |
| command_group(command_group), | |
| source_affinity(source_affinity) {} | |
| VerbRecord::VerbRecord(CommandExecutor exec, CommandCompleter complete, | |
| std::initializer_list<std::string> aliases, const char* short_help, | |
| const char* help, CommandGroup command_group, SourceAffinity source_affinity) | |
| : exec(std::move(exec)), | |
| aliases(aliases), | |
| short_help(short_help), | |
| help(help), | |
| command_group(command_group), | |
| source_affinity(source_affinity), | |
| complete(std::move(complete)) {} | |
| VerbRecord::VerbRecord(CommandExecutorWithCallback exec_cb, CommandCompleter complete, | |
| std::initializer_list<std::string> aliases, const char* short_help, | |
| const char* help, CommandGroup command_group, SourceAffinity source_affinity) | |
| : exec_cb(std::move(exec_cb)), | |
| aliases(aliases), | |
| short_help(short_help), | |
| help(help), | |
| command_group(command_group), | |
| source_affinity(source_affinity), | |
| complete(std::move(complete)) {} | |
| VerbRecord::~VerbRecord() = default; | |
| const std::map<Verb, VerbRecord>& GetVerbs() { | |
| static std::map<Verb, VerbRecord> all_verbs; | |
| if (all_verbs.empty()) { | |
| AppendSettingsVerbs(&all_verbs); | |
| all_verbs[Verb::kAspace] = GetAspaceVerbRecord(); | |
| all_verbs[Verb::kAttach] = GetAttachVerbRecord(); | |
| all_verbs[Verb::kAttachJob] = GetAttachJobVerbRecord(); | |
| all_verbs[Verb::kAuth] = GetAuthVerbRecord(); | |
| all_verbs[Verb::kBacktrace] = GetBacktraceVerbRecord(); | |
| all_verbs[Verb::kBreak] = GetBreakVerbRecord(); | |
| all_verbs[Verb::kClear] = GetClearVerbRecord(); | |
| all_verbs[Verb::kCls] = GetClsVerbRecord(); | |
| all_verbs[Verb::kConnect] = GetConnectVerbRecord(); | |
| all_verbs[Verb::kContinue] = GetContinueVerbRecord(); | |
| all_verbs[Verb::kDetach] = GetDetachVerbRecord(); | |
| all_verbs[Verb::kDisable] = GetDisableVerbRecord(); | |
| all_verbs[Verb::kDisconnect] = GetDisconnectVerbRecord(); | |
| all_verbs[Verb::kDisassemble] = GetDisassembleVerbRecord(); | |
| all_verbs[Verb::kDisplay] = GetDisplayVerbRecord(); | |
| all_verbs[Verb::kDown] = GetDownVerbRecord(); | |
| all_verbs[Verb::kEnable] = GetEnableVerbRecord(); | |
| all_verbs[Verb::kFinish] = GetFinishVerbRecord(); | |
| all_verbs[Verb::kHandle] = GetHandleVerbRecord(); | |
| all_verbs[Verb::kHelp] = GetHelpVerbRecord(); | |
| all_verbs[Verb::kJump] = GetJumpVerbRecord(); | |
| all_verbs[Verb::kKill] = GetKillVerbRecord(); | |
| all_verbs[Verb::kLibs] = GetLibsVerbRecord(); | |
| all_verbs[Verb::kList] = GetListVerbRecord(); | |
| all_verbs[Verb::kListProcesses] = GetPsVerbRecord(); | |
| all_verbs[Verb::kLocals] = GetLocalsVerbRecord(); | |
| all_verbs[Verb::kMemAnalyze] = GetMemAnalyzeVerbRecord(); | |
| all_verbs[Verb::kMemRead] = GetMemReadVerbRecord(); | |
| all_verbs[Verb::kNew] = GetNewVerbRecord(); | |
| all_verbs[Verb::kNext] = GetNextVerbRecord(); | |
| all_verbs[Verb::kNexti] = GetNextiVerbRecord(); | |
| all_verbs[Verb::kOpenDump] = GetOpendumpVerbRecord(); | |
| all_verbs[Verb::kPause] = GetPauseVerbRecord(); | |
| all_verbs[Verb::kPrint] = GetPrintVerbRecord(); | |
| all_verbs[Verb::kQuitAgent] = GetQuitAgentVerbRecord(); | |
| all_verbs[Verb::kQuit] = GetQuitVerbRecord(); | |
| all_verbs[Verb::kRegs] = GetRegsVerbRecord(); | |
| all_verbs[Verb::kRm] = GetRmVerbRecord(); | |
| all_verbs[Verb::kRun] = GetRunVerbRecord(); | |
| all_verbs[Verb::kStatus] = GetStatusVerbRecord(); | |
| all_verbs[Verb::kStdout] = GetStdoutVerbRecord(); | |
| all_verbs[Verb::kStderr] = GetStderrVerbRecord(); | |
| all_verbs[Verb::kStep] = GetStepVerbRecord(); | |
| all_verbs[Verb::kStepi] = GetStepiVerbRecord(); | |
| all_verbs[Verb::kSteps] = GetStepsVerbRecord(); | |
| all_verbs[Verb::kSymDebug] = GetSymDebugVerbRecord(); | |
| all_verbs[Verb::kSymInfo] = GetSymInfoVerbRecord(); | |
| all_verbs[Verb::kSymNear] = GetSymNearVerbRecord(); | |
| all_verbs[Verb::kSymSearch] = GetSymSearchVerbRecord(); | |
| all_verbs[Verb::kSymStat] = GetSymStatVerbRecord(); | |
| all_verbs[Verb::kSysInfo] = GetSysInfoVerbRecord(); | |
| all_verbs[Verb::kStack] = GetStackVerbRecord(); | |
| all_verbs[Verb::kUntil] = GetUntilVerbRecord(); | |
| all_verbs[Verb::kUp] = GetUpVerbRecord(); | |
| all_verbs[Verb::kWatch] = GetWatchVerbRecord(); | |
| // Everything but Noun::kNone (= 0) should be in the map. | |
| FX_DCHECK(all_verbs.size() == static_cast<size_t>(Verb::kLast) - 1) | |
| << "You need to update the verb lookup table for additions to Verbs."; | |
| } | |
| return all_verbs; | |
| } | |
| const VerbRecord* GetVerbRecord(Verb verb) { | |
| const auto& verbs = GetVerbs(); | |
| auto found = verbs.find(verb); | |
| if (found == verbs.end()) | |
| return nullptr; | |
| return &found->second; | |
| } | |
| const std::map<std::string, Verb>& GetStringVerbMap() { | |
| static std::map<std::string, Verb> map; | |
| if (map.empty()) { | |
| // Build up the reverse-mapping from alias to verb enum. | |
| for (const auto& verb_pair : GetVerbs()) { | |
| for (const auto& alias : verb_pair.second.aliases) | |
| map[alias] = verb_pair.first; | |
| } | |
| } | |
| return map; | |
| } | |
| std::string VerbToString(Verb v) { | |
| const auto& verbs = GetVerbs(); | |
| auto found = verbs.find(v); | |
| if (found == verbs.end()) | |
| return std::string(); | |
| return found->second.aliases[0]; | |
| } | |
| } // namespace zxdb |