diff --git a/share/qtcreator/dumper/lbridge.py b/share/qtcreator/dumper/lbridge.py index 8009b75a6769c94f191de0e6fad244f845112844..7c0cdfa71c40ba2f2de72047fbb196c5d72cf341 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: