From 3b35d399105cb091084fb780872d91edfe1a564b Mon Sep 17 00:00:00 2001 From: Alexandru Croitor Date: Tue, 2 Aug 2016 14:50:54 +0200 Subject: Fix debugger to correctly interpret stdout availability behavior Previously if program execution was paused, and a c++ command was executed via executeDebuggerCommand method, which in turn printed to stdout, Qt Creator would assume that program execution has been resumed. But in reality the execution was still paused. Make sure not to report the program execution as being resumed, in case if something is printed to stdout as a result of a debugger command. Change-Id: I8752be00b1bf5bd4767debc2eb26b9a433f251bb Reviewed-by: hjk --- share/qtcreator/debugger/lldbbridge.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) (limited to 'share') diff --git a/share/qtcreator/debugger/lldbbridge.py b/share/qtcreator/debugger/lldbbridge.py index afbff9099f..7a20042c40 100644 --- a/share/qtcreator/debugger/lldbbridge.py +++ b/share/qtcreator/debugger/lldbbridge.py @@ -231,6 +231,7 @@ class Dumper(DumperBase): self.report('lldbversion=\"%s\"' % lldb.SBDebugger.GetVersionString()) self.reportState("enginesetupok") + self.debuggerCommandInProgress = False def enterSubItem(self, item): if isinstance(item.name, lldb.SBValue): @@ -1335,10 +1336,12 @@ class Dumper(DumperBase): flavor = event.GetDataFlavor() state = lldb.SBProcess.GetStateFromEvent(event) bp = lldb.SBBreakpoint.GetBreakpointFromEvent(event) + skipEventReporting = self.debuggerCommandInProgress and (eventType == lldb.SBProcess.eBroadcastBitSTDOUT or eventType == lldb.SBProcess.eBroadcastBitSTDERR) self.report('event={type="%s",data="%s",msg="%s",flavor="%s",state="%s",bp="%s"}' % (eventType, out.GetData(), msg, flavor, self.stateName(state), bp)) if state != self.eventState: - self.eventState = state + if not skipEventReporting: + self.eventState = state if state == lldb.eStateExited: if self.isShuttingDown_: self.reportState("inferiorshutdownok") @@ -1381,7 +1384,8 @@ class Dumper(DumperBase): else: self.reportState("stopped") else: - self.reportState(self.stateName(state)) + if not skipEventReporting: + self.reportState(self.stateName(state)) if eventType == lldb.SBProcess.eBroadcastBitStateChanged: # 1 state = self.process.GetState() if state == lldb.eStateStopped: @@ -1683,6 +1687,7 @@ class Dumper(DumperBase): self.reportResult(self.hexencode(result.GetOutput()), {}) def executeDebuggerCommand(self, args): + self.debuggerCommandInProgress = True self.reportToken(args) result = lldb.SBCommandReturnObject() command = args['command'] @@ -1691,6 +1696,7 @@ class Dumper(DumperBase): output = result.GetOutput() error = str(result.GetError()) self.report('success="%d",output="%s",error="%s"' % (success, output, error)) + self.debuggerCommandInProgress = False def fetchDisassembler(self, args): functionName = args.get('function', '') -- cgit v1.2.1