static bool BreakpointOptionsCallbackFunction (void *baton, StoppointCallbackContext *context, lldb::user_id_t break_id, lldb::user_id_t break_loc_id) { bool ret_value = true; if (baton == NULL) return true; BreakpointOptions::CommandData *data = (BreakpointOptions::CommandData *) baton; StringList &commands = data->user_source; if (commands.GetSize() > 0) { ExecutionContext exe_ctx (context->exe_ctx_ref); Target *target = exe_ctx.GetTargetPtr(); if (target) { CommandReturnObject result; Debugger &debugger = target->GetDebugger(); // Rig up the results secondary output stream to the debugger's, so the output will come out synchronously // if the debugger is set up that way. StreamSP output_stream (debugger.GetAsyncOutputStream()); StreamSP error_stream (debugger.GetAsyncErrorStream()); result.SetImmediateOutputStream (output_stream); result.SetImmediateErrorStream (error_stream); CommandInterpreterRunOptions options; options.SetStopOnContinue(true); options.SetStopOnError (data->stop_on_error); options.SetEchoCommands (true); options.SetPrintResults (true); options.SetAddToHistory (false); debugger.GetCommandInterpreter().HandleCommands (commands, &exe_ctx, options, result); result.GetImmediateOutputStream()->Flush(); result.GetImmediateErrorStream()->Flush(); } } return ret_value; }
static bool WatchpointOptionsCallbackFunction (void *baton, StoppointCallbackContext *context, lldb::user_id_t watch_id) { bool ret_value = true; if (baton == NULL) return true; WatchpointOptions::CommandData *data = (WatchpointOptions::CommandData *) baton; StringList &commands = data->user_source; if (commands.GetSize() > 0) { ExecutionContext exe_ctx (context->exe_ctx_ref); Target *target = exe_ctx.GetTargetPtr(); if (target) { CommandReturnObject result; Debugger &debugger = target->GetDebugger(); // Rig up the results secondary output stream to the debugger's, so the output will come out synchronously // if the debugger is set up that way. StreamSP output_stream (debugger.GetAsyncOutputStream()); StreamSP error_stream (debugger.GetAsyncErrorStream()); result.SetImmediateOutputStream (output_stream); result.SetImmediateErrorStream (error_stream); bool stop_on_continue = true; bool echo_commands = false; bool print_results = true; debugger.GetCommandInterpreter().HandleCommands (commands, &exe_ctx, stop_on_continue, data->stop_on_error, echo_commands, print_results, eLazyBoolNo, result); result.GetImmediateOutputStream()->Flush(); result.GetImmediateErrorStream()->Flush(); } } return ret_value; }