From: Gunnar Beutner Date: Fri, 12 Aug 2016 09:00:19 +0000 (+0200) Subject: Implement support for inspecting variables with LLDB/GDB X-Git-Tag: v2.5.0~85 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=76ed38fbfe08ba3eadf089dd2868147bcdf6dca1;p=icinga2 Implement support for inspecting variables with LLDB/GDB fixes #12407 --- diff --git a/lib/cli/consolecommand.cpp b/lib/cli/consolecommand.cpp index 005ea9e19..a5d78292d 100644 --- a/lib/cli/consolecommand.cpp +++ b/lib/cli/consolecommand.cpp @@ -48,6 +48,40 @@ REGISTER_CLICOMMAND("console", ConsoleCommand); INITIALIZE_ONCE(&ConsoleCommand::StaticInitialize); +extern "C" void dbg_spawn_console(void) +{ + ScriptFrame frame; + ConsoleCommand::RunScriptConsole(frame); +} + +extern "C" void dbg_inspect_value(const Value& value) +{ + ConfigWriter::EmitValue(std::cout, 1, Serialize(value, 0)); + std::cout << std::endl; +} + +extern "C" void dbg_inspect_object(Object *obj) +{ + Object::Ptr objr = obj; + dbg_inspect_value(objr); +} + +extern "C" void dbg_eval(const char *text) +{ + Expression *expr; + + try { + ScriptFrame frame; + expr = ConfigCompiler::CompileText("", text); + Value result = Serialize(expr->Evaluate(frame), 0); + dbg_inspect_value(result); + } catch (const std::exception& ex) { + std::cout << "Error: " << DiagnosticInformation(ex) << "\n"; + } + + delete expr; +} + void ConsoleCommand::BreakpointHandler(ScriptFrame& frame, ScriptError *ex, const DebugInfo& di) { static boost::mutex mutex;