From 012924ec46662d79c189c28f9d370d41b19a8ad0 Mon Sep 17 00:00:00 2001
From: hjk <hjk121@nokiamail.com>
Date: Mon, 24 Jun 2013 17:40:00 +0200
Subject: [PATCH] Debugger: Fix behavior on pressing 'Stop' for LLDB

Task-number: QTCREATORBUG-9634
Change-Id: Iaa8eaf53169d7105e5f0657a06f5c9a780ba996d
Reviewed-by: Christian Stenger <christian.stenger@digia.com>
---
 share/qtcreator/dumper/lbridge.py | 25 +++++++++++++++++--------
 1 file changed, 17 insertions(+), 8 deletions(-)

diff --git a/share/qtcreator/dumper/lbridge.py b/share/qtcreator/dumper/lbridge.py
index 8009b75a676..7c0cdfa71c4 100644
--- a/share/qtcreator/dumper/lbridge.py
+++ b/share/qtcreator/dumper/lbridge.py
@@ -567,6 +567,7 @@ class Dumper:
         self.charPtrType_ = None
         self.voidType_ = None
         self.isShuttingDown_ = False
+        self.isInterrupting_ = False
         self.dummyValue = None
 
     def extractTemplateArgument(self, typename, index):
@@ -1082,8 +1083,9 @@ class Dumper:
             if self.dummyValue is None:
                 self.dummyValue = value
             with SubItem(self, value):
-                self.put('iname="%s",' % self.currentIName)
-                self.putItem(value)
+                if value.IsValid():
+                    self.put('iname="%s",' % self.currentIName)
+                    self.putItem(value)
 
         # 'watchers':[{'id':'watch.0','exp':'23'},...]
         if not self.dummyValue is None:
@@ -1144,13 +1146,9 @@ class Dumper:
         if self.process is None:
             self.report('msg="No process"')
             return
+        self.isInterrupting_ = True
         error = self.process.Stop()
         self.reportError(error)
-        self.consumeEvents()
-        if error.GetType() == 1:
-            state = self.process.GetState()
-            if state != lldb.eStateStopped:
-                self.report('state="inferiorstopfailed"')
 
     def detachInferior(self, _ = None):
         if self.process is None:
@@ -1167,6 +1165,10 @@ class Dumper:
             error = self.process.Continue()
             self.reportError(error)
 
+    def quitDebugger(self, _ = None):
+        self.report('state="inferiorshutdownrequested"')
+        self.process.Kill()
+
     def handleEvent(self, event):
         out = lldb.SBStream()
         event.GetDescription(out)
@@ -1178,7 +1180,6 @@ class Dumper:
         self.report('event={type="%s",data="%s",msg="%s",flavor="%s",state="%s"}'
             % (type, out.GetData(), msg, flavor, state))
         if state != self.eventState:
-            self.report('state="%s"' % stateNames[state])
             self.eventState = state
             if state == lldb.eStateExited:
                 if self.isShuttingDown_:
@@ -1187,6 +1188,14 @@ class Dumper:
                     self.report('state="inferiorexited"')
                 self.report('exited={status="%s",desc="%s"}'
                     % (self.process.GetExitStatus(), self.process.GetExitDescription()))
+            elif state == lldb.eStateStopped:
+                if self.isInterrupting_:
+                    self.isInterrupting_ = False
+                    self.report('state="inferiorstopok"')
+                else:
+                    self.report('state="stopped"')
+            else:
+                self.report('state="%s"' % stateNames[state])
         if type == lldb.SBProcess.eBroadcastBitStateChanged:
             state = self.process.GetState()
             if state == lldb.eStateStopped:
-- 
GitLab