diff options
| author | Jim Ingham <jingham@apple.com> | 2013-02-09 01:29:05 +0000 |
|---|---|---|
| committer | Jim Ingham <jingham@apple.com> | 2013-02-09 01:29:05 +0000 |
| commit | 0161b49cbadd54431b4acefa8dae954ebef12ec8 (patch) | |
| tree | 2f6c58512e07b7d65af0a6de0a0fd9df6e1d6013 /lldb/tools/driver/Driver.cpp | |
| parent | 1aa79e9f637d9f5fb514095e8b29108bd15c261f (diff) | |
| download | bcm5719-llvm-0161b49cbadd54431b4acefa8dae954ebef12ec8.tar.gz bcm5719-llvm-0161b49cbadd54431b4acefa8dae954ebef12ec8.zip | |
Reworked the way Process::RunThreadPlan and the ThreadPlanCallFunction interoperate to fix problems where
hitting auto-continue signals while running a thread plan would cause us to lose control of the debug
session.
<rdar://problem/12993641>
llvm-svn: 174793
Diffstat (limited to 'lldb/tools/driver/Driver.cpp')
| -rw-r--r-- | lldb/tools/driver/Driver.cpp | 27 |
1 files changed, 24 insertions, 3 deletions
diff --git a/lldb/tools/driver/Driver.cpp b/lldb/tools/driver/Driver.cpp index 8bbc212c717..6b59b612f24 100644 --- a/lldb/tools/driver/Driver.cpp +++ b/lldb/tools/driver/Driver.cpp @@ -973,11 +973,32 @@ Driver::HandleProcessEvent (const SBEvent &event) // Make sure the program hasn't been auto-restarted: if (SBProcess::GetRestartedFromEvent (event)) { + size_t num_reasons = SBProcess::GetNumRestartedReasonsFromEvent(event); + if (num_reasons > 0) + { // FIXME: Do we want to report this, or would that just be annoyingly chatty? - char message[1024]; - int message_len = ::snprintf (message, sizeof(message), "Process %" PRIu64 " stopped and was programmatically restarted.\n", + if (num_reasons == 1) + { + char message[1024]; + const char *reason = SBProcess::GetRestartedReasonAtIndexFromEvent (event, 0); + int message_len = ::snprintf (message, sizeof(message), "Process %" PRIu64 " stopped and restarted: %s\n", + process.GetProcessID(), reason ? reason : "<UNKNOWN REASON>"); + m_io_channel_ap->OutWrite(message, message_len, ASYNC); + } + else + { + char message[1024]; + int message_len = ::snprintf (message, sizeof(message), "Process %" PRIu64 " stopped and restarted, reasons:\n", process.GetProcessID()); - m_io_channel_ap->OutWrite(message, message_len, ASYNC); + m_io_channel_ap->OutWrite(message, message_len, ASYNC); + for (size_t i = 0; i < num_reasons; i++) + { + const char *reason = SBProcess::GetRestartedReasonAtIndexFromEvent (event, i); + int message_len = ::snprintf(message, sizeof(message), "\t%s\n", reason ? reason : "<UNKNOWN REASON>"); + m_io_channel_ap->OutWrite(message, message_len, ASYNC); + } + } + } } else { |

