bool CmdExtension::onServer(DebuggerProxy *proxy) { if (m_args.size() <= 1) { return processList(proxy); } string name = m_args[1]; Extension *ext = Extension::GetExtension(name); if (ext) { if (m_args.size() == 2) { if (ext->debuggerSupport() & IDebuggable::SupportInfo) { IDebuggable::InfoVec info; ext->debuggerInfo(info); m_out = DebuggerClient::FormatInfoVec(info); } else { m_err = "Extension doesn't have summary information."; } } else if (DebuggerClient::Match(m_args[2].c_str(), "dump")) { if (ext->debuggerSupport() & IDebuggable::SupportDump) { m_out = ext->debuggerDump(); m_out += "\n"; } else { m_err = "Extension doesn't have detailed dumps."; } } else { if (ext->debuggerSupport() & IDebuggable::SupportVerb) { string verb = m_args[2]; StringVec args; if (m_args.size() > 3) { args.insert(args.end(), m_args.begin() + 3, m_args.end()); } m_out = ext->debuggerVerb(verb, args); m_out += "\n"; } else { m_err = "Extension doesn't support any debugger actions."; } } } else { m_err = "Unable to find the specified extension: "; m_err += String(name); } return proxy->send(this); }