forked from qt-creator/qt-creator
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>
This commit is contained in:
@@ -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,9 +1336,11 @@ 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:
|
||||
if not skipEventReporting:
|
||||
self.eventState = state
|
||||
if state == lldb.eStateExited:
|
||||
if self.isShuttingDown_:
|
||||
@@ -1381,6 +1384,7 @@ class Dumper(DumperBase):
|
||||
else:
|
||||
self.reportState("stopped")
|
||||
else:
|
||||
if not skipEventReporting:
|
||||
self.reportState(self.stateName(state))
|
||||
if eventType == lldb.SBProcess.eBroadcastBitStateChanged: # 1
|
||||
state = self.process.GetState()
|
||||
@@ -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', '')
|
||||
|
Reference in New Issue
Block a user