Fix pause/continue of individual threads
work around buggy java server sending invalid threads response. java server supports this separate threads running/paused as a test case.
This commit is contained in:
parent
e1c1347bdd
commit
8801c2dac4
2 changed files with 36 additions and 23 deletions
|
|
@ -434,49 +434,59 @@ class DebugSession( object ):
|
||||||
|
|
||||||
@IfConnected()
|
@IfConnected()
|
||||||
def StepInto( self ):
|
def StepInto( self ):
|
||||||
if self._stackTraceView.GetCurrentThreadId() is None:
|
threadId = self._stackTraceView.GetCurrentThreadId()
|
||||||
|
if threadId is None:
|
||||||
return
|
return
|
||||||
|
|
||||||
self._connection.DoRequest( None, {
|
def handler( *_ ):
|
||||||
|
self._stackTraceView.OnContinued( { 'threadId': threadId } )
|
||||||
|
self._codeView.SetCurrentFrame( None )
|
||||||
|
|
||||||
|
self._connection.DoRequest( handler, {
|
||||||
'command': 'stepIn',
|
'command': 'stepIn',
|
||||||
'arguments': {
|
'arguments': {
|
||||||
'threadId': self._stackTraceView.GetCurrentThreadId()
|
'threadId': threadId
|
||||||
},
|
},
|
||||||
} )
|
} )
|
||||||
self._stackTraceView.OnContinued()
|
|
||||||
self._codeView.SetCurrentFrame( None )
|
|
||||||
|
|
||||||
@IfConnected()
|
@IfConnected()
|
||||||
def StepOut( self ):
|
def StepOut( self ):
|
||||||
if self._stackTraceView.GetCurrentThreadId() is None:
|
threadId = self._stackTraceView.GetCurrentThreadId()
|
||||||
|
if threadId is None:
|
||||||
return
|
return
|
||||||
|
|
||||||
self._connection.DoRequest( None, {
|
def handler( *_ ):
|
||||||
|
self._stackTraceView.OnContinued( { 'threadId': threadId } )
|
||||||
|
self._codeView.SetCurrentFrame( None )
|
||||||
|
|
||||||
|
self._connection.DoRequest( handler, {
|
||||||
'command': 'stepOut',
|
'command': 'stepOut',
|
||||||
'arguments': {
|
'arguments': {
|
||||||
'threadId': self._stackTraceView.GetCurrentThreadId()
|
'threadId': threadId
|
||||||
},
|
},
|
||||||
} )
|
} )
|
||||||
self._stackTraceView.OnContinued()
|
|
||||||
self._codeView.SetCurrentFrame( None )
|
|
||||||
|
|
||||||
def Continue( self ):
|
def Continue( self ):
|
||||||
if not self._connection:
|
if not self._connection:
|
||||||
self.Start()
|
self.Start()
|
||||||
return
|
return
|
||||||
|
|
||||||
if self._stackTraceView.GetCurrentThreadId() is None:
|
threadId = self._stackTraceView.GetCurrentThreadId()
|
||||||
|
if threadId is None:
|
||||||
utils.UserMessage( 'No current thread', persist = True )
|
utils.UserMessage( 'No current thread', persist = True )
|
||||||
return
|
return
|
||||||
|
|
||||||
self._connection.DoRequest( None, {
|
def handler( *_ ):
|
||||||
|
self._stackTraceView.OnContinued( { 'threadId': threadId } )
|
||||||
|
self._codeView.SetCurrentFrame( None )
|
||||||
|
|
||||||
|
self._connection.DoRequest( handler, {
|
||||||
'command': 'continue',
|
'command': 'continue',
|
||||||
'arguments': {
|
'arguments': {
|
||||||
'threadId': self._stackTraceView.GetCurrentThreadId(),
|
'threadId': threadId,
|
||||||
},
|
},
|
||||||
} )
|
} )
|
||||||
self._stackTraceView.OnContinued()
|
|
||||||
self._codeView.SetCurrentFrame( None )
|
|
||||||
|
|
||||||
@IfConnected()
|
@IfConnected()
|
||||||
def Pause( self ):
|
def Pause( self ):
|
||||||
|
|
|
||||||
|
|
@ -49,6 +49,7 @@ class Thread:
|
||||||
def Continued( self ):
|
def Continued( self ):
|
||||||
self.state = Thread.RUNNING
|
self.state = Thread.RUNNING
|
||||||
self.stopped_event = None
|
self.stopped_event = None
|
||||||
|
self.Collapse()
|
||||||
|
|
||||||
def Exited( self ):
|
def Exited( self ):
|
||||||
self.state = Thread.TERMINATED
|
self.state = Thread.TERMINATED
|
||||||
|
|
@ -56,7 +57,7 @@ class Thread:
|
||||||
|
|
||||||
def State( self ):
|
def State( self ):
|
||||||
if self.state == Thread.PAUSED:
|
if self.state == Thread.PAUSED:
|
||||||
return self.stopped_event.get( 'description', 'paused' )
|
return self.stopped_event.get( 'description' ) or 'paused'
|
||||||
elif self.state == Thread.RUNNING:
|
elif self.state == Thread.RUNNING:
|
||||||
return 'running'
|
return 'running'
|
||||||
return 'terminated'
|
return 'terminated'
|
||||||
|
|
@ -191,7 +192,7 @@ class StackTraceView( object ):
|
||||||
self.LoadThreads( *self._pending_thread_request )
|
self.LoadThreads( *self._pending_thread_request )
|
||||||
return
|
return
|
||||||
|
|
||||||
if not message[ 'body' ][ 'threads' ]:
|
if not ( message.get( 'body' ) or {} ).get( 'threads' ):
|
||||||
# This is a protocol error. It is required to return at least one!
|
# This is a protocol error. It is required to return at least one!
|
||||||
utils.UserMessage( 'Protocol error: Server returned no threads',
|
utils.UserMessage( 'Protocol error: Server returned no threads',
|
||||||
persist = False,
|
persist = False,
|
||||||
|
|
@ -372,7 +373,9 @@ class StackTraceView( object ):
|
||||||
if thread is None:
|
if thread is None:
|
||||||
utils.UserMessage( 'No thread selected' )
|
utils.UserMessage( 'No thread selected' )
|
||||||
elif thread.state == Thread.PAUSED:
|
elif thread.state == Thread.PAUSED:
|
||||||
self._session._connection.DoRequest( None, {
|
self._session._connection.DoRequest(
|
||||||
|
lambda *_: self.OnContinued( { 'threadId': thread.id } ),
|
||||||
|
{
|
||||||
'command': 'continue',
|
'command': 'continue',
|
||||||
'arguments': {
|
'arguments': {
|
||||||
'threadId': thread.id,
|
'threadId': thread.id,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue