summaryrefslogtreecommitdiff
path: root/share
diff options
context:
space:
mode:
authorAlexandru Croitor <alexandru.croitor@qt.io>2016-08-02 14:50:54 +0200
committerAlexandru Croitor <alexandru.croitor@qt.io>2016-08-30 08:12:02 +0000
commit3b35d399105cb091084fb780872d91edfe1a564b (patch)
treea86baf620d3a5cab93e74e34d81a07497bf2e98a /share
parent54b25996325e0eecf9368b2970e5e15788512931 (diff)
downloadqt-creator-3b35d399105cb091084fb780872d91edfe1a564b.tar.gz
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 <hjk@qt.io>
Diffstat (limited to 'share')
-rw-r--r--share/qtcreator/debugger/lldbbridge.py10
1 files changed, 8 insertions, 2 deletions
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', '')