Previously if we got a DoDestroy while stopped at a breakpoint, we would detach and then say the process had exited. This is completely wrong, as it resulted in the python script incorrectly assuming that the process had actually exited and trying to delete the image, when in fact it had done no such thing. The fix employed here is that when we get a DoDestroy, we do 3 steps: 1) initiate a termination sequence on the process 2) If we were stopped handling an exception of any kind, mask it and let the program resume, causing the program to see the termination request and exit on its own. 3) Let the program exit normally, and close all of our handles before returning control back to DoDestroy. This fixes Bug 21722 and Bug 21723. llvm-svn: 223272
40 lines
1.3 KiB
C++
40 lines
1.3 KiB
C++
//===-- ForwardDecl.h -------------------------------------------*- C++ -*-===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef liblldb_Plugins_Process_Windows_ForwardDecl_H_
|
|
#define liblldb_Plugins_Process_Windows_ForwardDecl_H_
|
|
|
|
class ProcessWindows;
|
|
|
|
#include <memory>
|
|
|
|
// ExceptionResult is returned by the debug delegate to specify how it processed
|
|
// the exception.
|
|
enum class ExceptionResult
|
|
{
|
|
BreakInDebugger, // Break in the debugger and give the user a chance to interact with
|
|
// the program before continuing.
|
|
MaskException, // Eat the exception and don't let the application know it occurred.
|
|
SendToApplication // Send the exception to the application to be handled as if there were
|
|
// no debugger attached.
|
|
};
|
|
|
|
namespace lldb_private
|
|
{
|
|
|
|
class IDebugDelegate;
|
|
class DebuggerThread;
|
|
class ExceptionRecord;
|
|
|
|
typedef std::shared_ptr<IDebugDelegate> DebugDelegateSP;
|
|
typedef std::shared_ptr<DebuggerThread> DebuggerThreadSP;
|
|
typedef std::unique_ptr<ExceptionRecord> ExceptionRecordUP;
|
|
}
|
|
|
|
#endif |