From 60f5b5afc58c73a57415219433848c78cc9f97c9 Mon Sep 17 00:00:00 2001
From: hjk <hjk121@nokiamail.com>
Date: Mon, 2 Jun 2014 16:45:12 +0200
Subject: [PATCH] Debugger: Fail more gracefully on "ill" LLDB engines

Less need to use the hard Debug->Abort

Change-Id: Ib019792063924549ace58a63ccef994dbfaa00dc
Reviewed-by: hjk <hjk121@nokiamail.com>
---
 share/qtcreator/debugger/lldbbridge.py   | 11 ++++++++++-
 src/plugins/debugger/lldb/lldbengine.cpp |  2 ++
 2 files changed, 12 insertions(+), 1 deletion(-)

diff --git a/share/qtcreator/debugger/lldbbridge.py b/share/qtcreator/debugger/lldbbridge.py
index 3c9a8bd964..bced674e6b 100644
--- a/share/qtcreator/debugger/lldbbridge.py
+++ b/share/qtcreator/debugger/lldbbridge.py
@@ -1195,6 +1195,9 @@ class Dumper(DumperBase):
         else:
             error = self.process.Continue()
             self.reportError(error)
+            # Happens when attaching to GDBserver.
+            if not error.Success():
+                self.reportState("inferiorill")
 
     def quitDebugger(self, _ = None):
         self.reportState("inferiorshutdownrequested")
@@ -1451,7 +1454,13 @@ class Dumper(DumperBase):
 
     def shutdownInferior(self, _ = None):
         self.isShuttingDown_ = True
-        self.process.Kill()
+        if self.process is None:
+            self.reportState("inferiorshutdownok")
+        else:
+            state = self.process.GetState()
+            if state == lldb.eStateStopped:
+                self.process.Kill()
+            self.reportState("inferiorshutdownok")
 
     def quit(self, _ = None):
         self.reportState("engineshutdownok")
diff --git a/src/plugins/debugger/lldb/lldbengine.cpp b/src/plugins/debugger/lldb/lldbengine.cpp
index 696ef9811f..6d343556fa 100644
--- a/src/plugins/debugger/lldb/lldbengine.cpp
+++ b/src/plugins/debugger/lldb/lldbengine.cpp
@@ -1216,6 +1216,8 @@ void LldbEngine::refreshState(const GdbMi &reportedState)
         notifyInferiorStopOk();
     else if (newState == "inferiorstopfailed")
         notifyInferiorStopFailed();
+    else if (newState == "inferiorill")
+        notifyInferiorIll();
     else if (newState == "enginesetupok")
         notifyEngineSetupOk();
     else if (newState == "enginesetupfailed")
-- 
GitLab