diff options
author | Alexandru Croitor <alexandru.croitor@qt.io> | 2016-08-02 14:50:54 +0200 |
---|---|---|
committer | Alexandru Croitor <alexandru.croitor@qt.io> | 2016-08-30 08:12:02 +0000 |
commit | 3b35d399105cb091084fb780872d91edfe1a564b (patch) | |
tree | a86baf620d3a5cab93e74e34d81a07497bf2e98a /share | |
parent | 54b25996325e0eecf9368b2970e5e15788512931 (diff) | |
download | qt-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.py | 10 |
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', '') |