diff options
Diffstat (limited to 'lldb/source/Plugins/Process/Windows/ProcessWindows.cpp')
| -rw-r--r-- | lldb/source/Plugins/Process/Windows/ProcessWindows.cpp | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/lldb/source/Plugins/Process/Windows/ProcessWindows.cpp b/lldb/source/Plugins/Process/Windows/ProcessWindows.cpp index db410c35a20..511dd356bf0 100644 --- a/lldb/source/Plugins/Process/Windows/ProcessWindows.cpp +++ b/lldb/source/Plugins/Process/Windows/ProcessWindows.cpp @@ -28,6 +28,7 @@ #include "lldb/Target/Target.h" #include "DebuggerThread.h" +#include "ExceptionRecord.h" #include "LocalDebugDelegate.h" #include "ProcessMessages.h" #include "ProcessWindows.h" @@ -144,6 +145,7 @@ ProcessWindows::DoLaunch(Module *exe_module, launch_info.SetProcessID(process.GetProcessId()); SetID(process.GetProcessId()); + return result; } @@ -151,6 +153,11 @@ Error ProcessWindows::DoResume() { Error error; + if (!m_active_exception) + return error; + + m_debugger->ContinueAsyncException(ExceptionResult::Handled); + SetPrivateState(eStateRunning); return error; } @@ -240,6 +247,7 @@ void ProcessWindows::OnExitProcess(const ProcessMessageExitProcess &message) { SetProcessExitStatus(nullptr, GetID(), true, 0, message.GetExitCode()); + SetPrivateState(eStateExited); } void @@ -248,9 +256,20 @@ ProcessWindows::OnDebuggerConnected(const ProcessMessageDebuggerConnected &messa ::SetEvent(m_data_up->m_launched_event); } -void +ExceptionResult ProcessWindows::OnDebugException(const ProcessMessageException &message) { + ExceptionResult result = ExceptionResult::Handled; + const ExceptionRecord &record = message.GetExceptionRecord(); + m_active_exception.reset(new ExceptionRecord(record)); + switch (record.GetExceptionCode()) + { + case EXCEPTION_BREAKPOINT: + SetPrivateState(eStateStopped); + result = ExceptionResult::WillHandle; + break; + } + return result; } void |

