diff options
Diffstat (limited to 'lldb/source/Target/Process.cpp')
-rw-r--r-- | lldb/source/Target/Process.cpp | 51 |
1 files changed, 42 insertions, 9 deletions
diff --git a/lldb/source/Target/Process.cpp b/lldb/source/Target/Process.cpp index 07e1cdf5241..6ed2b2ac040 100644 --- a/lldb/source/Target/Process.cpp +++ b/lldb/source/Target/Process.cpp @@ -708,30 +708,39 @@ ProcessInstanceInfoMatch::Clear() m_match_all_users = false; } -Process* -Process::FindPlugin (Target &target, const char *plugin_name, Listener &listener) +ProcessSP +Process::FindPlugin (Target &target, const char *plugin_name, Listener &listener, const FileSpec *crash_file_path) { + ProcessSP process_sp; ProcessCreateInstance create_callback = NULL; if (plugin_name) { create_callback = PluginManager::GetProcessCreateCallbackForPluginName (plugin_name); if (create_callback) { - std::auto_ptr<Process> debugger_ap(create_callback(target, listener)); - if (debugger_ap->CanDebug(target, true)) - return debugger_ap.release(); + process_sp = create_callback(target, listener, crash_file_path); + if (process_sp) + { + if (!process_sp->CanDebug(target, true)) + process_sp.reset(); + } } } else { for (uint32_t idx = 0; (create_callback = PluginManager::GetProcessCreateCallbackAtIndex(idx)) != NULL; ++idx) { - std::auto_ptr<Process> debugger_ap(create_callback(target, listener)); - if (debugger_ap->CanDebug(target, false)) - return debugger_ap.release(); + process_sp = create_callback(target, listener, crash_file_path); + if (process_sp) + { + if (!process_sp->CanDebug(target, false)) + process_sp.reset(); + else + break; + } } } - return NULL; + return process_sp; } @@ -2328,6 +2337,30 @@ Process::Launch (const ProcessLaunchInfo &launch_info) return error; } + +Error +Process::LoadCore () +{ + Error error = DoLoadCore(); + if (error.Success()) + { + if (PrivateStateThreadIsValid ()) + ResumePrivateStateThread (); + else + StartPrivateStateThread (); + + CompleteAttach (); + // We successfully loaded a core file, now pretend we stopped so we can + // show all of the threads in the core file and explore the crashed + // state. + SetPrivateState (eStateStopped); + + } + return error; +} + + + Process::NextEventAction::EventActionResult Process::AttachCompletionHandler::PerformAction (lldb::EventSP &event_sp) { |