void Driver::ExecuteInitialCommands (bool before_file) { size_t num_commands; std::vector<std::pair<bool, std::string> > *command_set; if (before_file) command_set = &(m_option_data.m_initial_commands); else command_set = &(m_option_data.m_after_file_commands); num_commands = command_set->size(); SBCommandReturnObject result; bool old_async = GetDebugger().GetAsync(); GetDebugger().SetAsync(false); for (size_t idx = 0; idx < num_commands; idx++) { bool is_file = (*command_set)[idx].first; const char *command = (*command_set)[idx].second.c_str(); char command_string[PATH_MAX * 2]; const bool dump_stream_only_if_no_immediate = true; const char *executed_command = command; if (is_file) { ::snprintf (command_string, sizeof(command_string), "command source -s %i '%s'", m_option_data.m_source_quietly, command); executed_command = command_string; } m_debugger.GetCommandInterpreter().HandleCommand (executed_command, result, false); if (!m_option_data.m_source_quietly || result.Succeeded() == false) { const size_t output_size = result.GetOutputSize(); if (output_size > 0) { const char *cstr = result.GetOutput(dump_stream_only_if_no_immediate); if (cstr) printf ("%s", cstr); } const size_t error_size = result.GetErrorSize(); if (error_size > 0) { const char *cstr = result.GetError(dump_stream_only_if_no_immediate); if (cstr) printf ("%s", cstr); } } if (result.Succeeded() == false) { const char *type = before_file ? "before file" : "after_file"; if (is_file) ::fprintf(stderr, "Aborting %s command execution, command file: '%s' failed.\n", type, command); else ::fprintf(stderr, "Aborting %s command execution, command: '%s' failed.\n", type, command); break; } result.Clear(); } GetDebugger().SetAsync(old_async); }
void SBCommandInterpreter::ResolveCommand(const char *command_line, SBCommandReturnObject &result) { result.Clear(); if (command_line && IsValid()) { m_opaque_ptr->ResolveCommand(command_line, result.ref()); } else { result->AppendError( "SBCommandInterpreter or the command line is not valid"); result->SetStatus(eReturnStatusFailed); } }
void SBCommandInterpreter::SourceInitFileInCurrentWorkingDirectory (SBCommandReturnObject &result) { result.Clear(); if (m_opaque_ptr) { m_opaque_ptr->SourceInitFile (true, result.ref()); } else { result->AppendError ("SBCommandInterpreter is not valid"); result->SetStatus (eReturnStatusFailed); } }
lldb::ReturnStatus SBCommandInterpreter::HandleCommand (const char *command_line, SBCommandReturnObject &result, bool add_to_history) { result.Clear(); if (m_opaque_ptr) { m_opaque_ptr->HandleCommand (command_line, add_to_history, result.ref()); } else { result->AppendError ("SBCommandInterpreter is not valid"); result->SetStatus (eReturnStatusFailed); } return result.GetStatus(); }
lldb::ReturnStatus SBCommandInterpreter::HandleCommand (const char *command_line, SBExecutionContext &override_context, SBCommandReturnObject &result, bool add_to_history) { Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); if (log) log->Printf ("SBCommandInterpreter(%p)::HandleCommand (command=\"%s\", SBCommandReturnObject(%p), add_to_history=%i)", static_cast<void*>(m_opaque_ptr), command_line, static_cast<void*>(result.get()), add_to_history); ExecutionContext ctx, *ctx_ptr; if (override_context.get()) { ctx = override_context.get()->Lock(true); ctx_ptr = &ctx; } else ctx_ptr = nullptr; result.Clear(); if (command_line && IsValid()) { result.ref().SetInteractive(false); m_opaque_ptr->HandleCommand (command_line, add_to_history ? eLazyBoolYes : eLazyBoolNo, result.ref(), ctx_ptr); } else { result->AppendError ("SBCommandInterpreter or the command line is not valid"); result->SetStatus (eReturnStatusFailed); } // We need to get the value again, in case the command disabled the log! log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API); if (log) { SBStream sstr; result.GetDescription (sstr); log->Printf ("SBCommandInterpreter(%p)::HandleCommand (command=\"%s\", SBCommandReturnObject(%p): %s, add_to_history=%i) => %i", static_cast<void*>(m_opaque_ptr), command_line, static_cast<void*>(result.get()), sstr.GetData(), add_to_history, result.GetStatus()); } return result.GetStatus(); }
void SBCommandInterpreter::SourceInitFileInCurrentWorkingDirectory( SBCommandReturnObject &result) { result.Clear(); if (IsValid()) { TargetSP target_sp(m_opaque_ptr->GetDebugger().GetSelectedTarget()); std::unique_lock<std::recursive_mutex> lock; if (target_sp) lock = std::unique_lock<std::recursive_mutex>(target_sp->GetAPIMutex()); m_opaque_ptr->SourceInitFile(true, result.ref()); } else { result->AppendError("SBCommandInterpreter is not valid"); result->SetStatus(eReturnStatusFailed); } Log *log(lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_API)); if (log) log->Printf( "SBCommandInterpreter(%p)::SourceInitFileInCurrentWorkingDirectory " "(&SBCommandReturnObject(%p))", static_cast<void *>(m_opaque_ptr), static_cast<void *>(result.get())); }
void SBCommandInterpreter::SourceInitFileInCurrentWorkingDirectory (SBCommandReturnObject &result) { result.Clear(); if (m_opaque_ptr) { TargetSP target_sp(m_opaque_ptr->GetDebugger().GetSelectedTarget()); Mutex::Locker api_locker; if (target_sp) api_locker.Lock(target_sp->GetAPIMutex()); m_opaque_ptr->SourceInitFile (true, result.ref()); } else { result->AppendError ("SBCommandInterpreter is not valid"); result->SetStatus (eReturnStatusFailed); } LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); if (log) log->Printf ("SBCommandInterpreter(%p)::SourceInitFileInCurrentWorkingDirectory (&SBCommandReturnObject(%p))", m_opaque_ptr, result.get()); }
lldb::ReturnStatus SBCommandInterpreter::HandleCommand (const char *command_line, SBCommandReturnObject &result, bool add_to_history) { LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); if (log) log->Printf ("SBCommandInterpreter(%p)::HandleCommand (command=\"%s\", SBCommandReturnObject(%p), add_to_history=%i)", m_opaque_ptr, command_line, result.get(), add_to_history); result.Clear(); if (command_line && m_opaque_ptr) { TargetSP target_sp(m_opaque_ptr->GetDebugger().GetSelectedTarget()); Mutex::Locker api_locker; if (target_sp) api_locker.Lock(target_sp->GetAPIMutex()); m_opaque_ptr->HandleCommand (command_line, add_to_history ? eLazyBoolYes : eLazyBoolNo, result.ref()); } else { result->AppendError ("SBCommandInterpreter or the command line is not valid"); result->SetStatus (eReturnStatusFailed); } // We need to get the value again, in case the command disabled the log! log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API); if (log) { SBStream sstr; result.GetDescription (sstr); log->Printf ("SBCommandInterpreter(%p)::HandleCommand (command=\"%s\", SBCommandReturnObject(%p): %s, add_to_history=%i) => %i", m_opaque_ptr, command_line, result.get(), sstr.GetData(), add_to_history, result.GetStatus()); } return result.GetStatus(); }