Ask the user about terminating the debuggee
CodeLLDB seems to actually support the terminateDebugee flag, so rather than just forcefully killing things, ask the user if they want to.
This commit is contained in:
parent
fd03e074f3
commit
5201995279
2 changed files with 31 additions and 7 deletions
|
|
@ -793,7 +793,12 @@ class DebugSession( object ):
|
|||
arguments = {}
|
||||
if self._server_capabilities.get( 'supportTerminateDebuggee' ):
|
||||
# If we attached, we should _not_ terminate the debuggee
|
||||
arguments[ 'terminateDebuggee' ] = False
|
||||
if self._stackTraceView.AnyThreadsRunning():
|
||||
choice = utils.AskForInput( "Terminate debugee [Y/N/default]? ", "" )
|
||||
if choice == "Y" or choice == "y":
|
||||
arguments[ 'terminateDebuggee' ] = True
|
||||
elif choice == "N" or choice == 'n':
|
||||
arguments[ 'terminateDebuggee' ] = False
|
||||
|
||||
self._connection.DoRequest( handler, {
|
||||
'command': 'disconnect',
|
||||
|
|
@ -1164,10 +1169,22 @@ class DebugSession( object ):
|
|||
|
||||
self._connection.DoResponse( message, None, response )
|
||||
|
||||
def OnEvent_terminated( self, message ):
|
||||
# The debugging _session_ has terminated. This does not mean that the
|
||||
# debugee has terminated (that's the exited event).
|
||||
#
|
||||
# We will handle this when the server actually exists.
|
||||
#
|
||||
# FIXME we should always wait for this event before disconnecting closing
|
||||
# any socket connection
|
||||
self.SetCurrentFrame( None )
|
||||
|
||||
|
||||
def OnEvent_exited( self, message ):
|
||||
utils.UserMessage( 'The debugee exited with status code: {}'.format(
|
||||
message[ 'body' ][ 'exitCode' ] ) )
|
||||
self.SetCurrentFrame( None )
|
||||
self._stackTraceView.OnExited( message )
|
||||
self._codeView.SetCurrentFrame( None )
|
||||
|
||||
def OnEvent_process( self, message ):
|
||||
utils.UserMessage( 'The debugee was started: {}'.format(
|
||||
|
|
@ -1210,11 +1227,6 @@ class DebugSession( object ):
|
|||
else:
|
||||
self._logger.debug( "No server exit handler" )
|
||||
|
||||
def OnEvent_terminated( self, message ):
|
||||
# We will handle this when the server actually exists
|
||||
utils.UserMessage( "Debugging was terminated by the server." )
|
||||
self.SetCurrentFrame( None )
|
||||
|
||||
def OnEvent_output( self, message ):
|
||||
if self._outputView:
|
||||
self._outputView.OnOutput( message[ 'body' ] )
|
||||
|
|
|
|||
|
|
@ -364,6 +364,14 @@ class StackTraceView( object ):
|
|||
self._JumpToFrame( frame )
|
||||
|
||||
|
||||
def AnyThreadsRunning( self ):
|
||||
for thread in self._threads:
|
||||
if thread.state != Thread.TERMINATED:
|
||||
return True
|
||||
|
||||
return False
|
||||
|
||||
|
||||
def _JumpToFrame( self, frame, reason = '' ):
|
||||
def do_jump():
|
||||
if 'line' in frame and frame[ 'line' ] > 0:
|
||||
|
|
@ -459,6 +467,10 @@ class StackTraceView( object ):
|
|||
|
||||
self.LoadThreads( infer_current_frame )
|
||||
|
||||
def OnExited( self, event ):
|
||||
for thread in self._threads:
|
||||
thread.Exited()
|
||||
|
||||
def _DrawStackTrace( self, thread: Thread ):
|
||||
if not thread.IsExpanded():
|
||||
return
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue