Index: include/lldb/API/SBProcess.h =================================================================== --- include/lldb/API/SBProcess.h +++ include/lldb/API/SBProcess.h @@ -323,6 +323,8 @@ bool IsInstrumentationRuntimePresent(InstrumentationRuntimeType type); + bool GetShouldDetach() const; + protected: friend class SBAddress; friend class SBBreakpoint; Index: source/API/SBProcess.cpp =================================================================== --- source/API/SBProcess.cpp +++ source/API/SBProcess.cpp @@ -1401,3 +1401,12 @@ return runtime_sp->IsActive(); } + +bool +SBProcess::GetShouldDetach() const +{ + ProcessSP process_sp(GetSP()); + if (process_sp) + return process_sp->GetShouldDetach(); + return false; +} Index: tools/lldb-mi/MICmdCmdMiscellanous.cpp =================================================================== --- tools/lldb-mi/MICmdCmdMiscellanous.cpp +++ tools/lldb-mi/MICmdCmdMiscellanous.cpp @@ -84,7 +84,11 @@ CMICmdCmdGdbExit::Execute(void) { CMICmnLLDBDebugger::Instance().GetDriver().SetExitApplicationFlag(true); - const lldb::SBError sbErr = m_rLLDBDebugSessionInfo.GetProcess().Detach(); + lldb::SBProcess sbProcess = m_rLLDBDebugSessionInfo.GetProcess(); + if (!sbProcess.IsValid()) + return MIstatus::success; + + const lldb::SBError sbErr = sbProcess.GetShouldDetach() ? sbProcess.Detach() : sbProcess.Destroy(); // Do not check for sbErr.Fail() here, m_lldbProcess is likely !IsValid() return MIstatus::success;