Updates for latest Python debug adapter
They moved the location of the main application. But also: - ignore multiple responses for the same request - ignore protocol violations for variablesReference (assume 0) - ignore protocol violations for missing 'name' (assume basename of path)
This commit is contained in:
parent
14603ae72f
commit
673de95283
8 changed files with 43 additions and 15 deletions
|
|
@ -142,6 +142,8 @@ class DebugAdapterConnection( object ):
|
|||
payload = str( self._buffer[ : content_length ], 'utf-8' )
|
||||
self._buffer = self._buffer[ content_length : ]
|
||||
|
||||
self._logger.debug( 'Message received (raw): %s', payload )
|
||||
|
||||
message = json.loads( payload )
|
||||
|
||||
self._logger.debug( 'Message received: {0}'.format( message ) )
|
||||
|
|
@ -157,7 +159,16 @@ class DebugAdapterConnection( object ):
|
|||
return
|
||||
|
||||
if message[ 'type' ] == 'response':
|
||||
request = self._outstanding_requests.pop( message[ 'request_seq' ] )
|
||||
try:
|
||||
request = self._outstanding_requests.pop( message[ 'request_seq' ] )
|
||||
except KeyError:
|
||||
# Sigh. It looks like the ms python debug adapter sends duplicate
|
||||
# initialize responses.
|
||||
utils.UserMessage(
|
||||
"Protocol error: duplicate response for request {}".format(
|
||||
message[ 'request_seq' ] ) )
|
||||
self._logger.exception( 'Duplicate response: {}'.format( message ) )
|
||||
return
|
||||
|
||||
if message[ 'success' ]:
|
||||
if request.handler:
|
||||
|
|
|
|||
|
|
@ -516,6 +516,19 @@ class DebugSession( object ):
|
|||
|
||||
self._connection.DoResponse( message, None, response )
|
||||
|
||||
def OnEvent_exited( self, message ):
|
||||
utils.UserMessage( 'The debugee exited with status code: {}'.format(
|
||||
message[ 'body' ][ 'exitCode' ] ) )
|
||||
|
||||
def OnEvent_process( self, message ):
|
||||
utils.UserMessage( 'The debugee was started: {}'.format(
|
||||
message[ 'body' ][ 'name' ] ) )
|
||||
|
||||
def OnEvent_module( self, message ):
|
||||
pass
|
||||
|
||||
def OnEvent_continued( self, message ):
|
||||
pass
|
||||
|
||||
def Clear( self ):
|
||||
self._codeView.Clear()
|
||||
|
|
|
|||
|
|
@ -88,8 +88,12 @@ class OutputView( object ):
|
|||
def print_result( message ):
|
||||
utils.AppendToBuffer( console,
|
||||
'Evaluated: ' + expression )
|
||||
utils.AppendToBuffer( console,
|
||||
' Result: ' + message[ 'body' ][ 'result' ] )
|
||||
|
||||
result = message[ 'body' ][ 'result' ]
|
||||
if message[ 'body' ].get( 'result' ) is None:
|
||||
result = 'null'
|
||||
|
||||
utils.AppendToBuffer( console, ' Result: ' + result )
|
||||
|
||||
self._connection.DoRequest( print_result, {
|
||||
'command': 'evaluate',
|
||||
|
|
|
|||
|
|
@ -14,6 +14,7 @@
|
|||
# limitations under the License.
|
||||
|
||||
import vim
|
||||
import os
|
||||
|
||||
from vimspector import utils
|
||||
|
||||
|
|
@ -196,6 +197,9 @@ class StackTraceView( object ):
|
|||
else:
|
||||
source = { 'name': '<unknown>' }
|
||||
|
||||
if 'name' not in source:
|
||||
source[ 'name' ] = os.path.basename( source[ 'path' ] )
|
||||
|
||||
line = utils.AppendToBuffer(
|
||||
self._buf,
|
||||
' {0}: {1}@{2}:{3}'.format( frame[ 'id' ],
|
||||
|
|
|
|||
|
|
@ -214,10 +214,7 @@ class VariablesView( object ):
|
|||
view.draw()
|
||||
return
|
||||
|
||||
# Expand. (only if there is anything to expand)
|
||||
if 'variablesReference' not in variable:
|
||||
return
|
||||
if variable[ 'variablesReference' ] <= 0:
|
||||
if variable.get( 'variablesReference', 0 ) <= 0:
|
||||
return
|
||||
|
||||
variable[ '_expanded' ] = True
|
||||
|
|
@ -236,7 +233,7 @@ class VariablesView( object ):
|
|||
view.win.buffer,
|
||||
'{indent}{icon} {name} ({type_}): {value}'.format(
|
||||
indent = ' ' * indent,
|
||||
icon = '+' if ( variable[ 'variablesReference' ] > 0 and
|
||||
icon = '+' if ( variable.get( 'variablesReference', 0 ) > 0 and
|
||||
'_variables' not in variable ) else '-',
|
||||
name = variable[ 'name' ],
|
||||
type_ = variable.get( 'type', '<unknown type>' ),
|
||||
|
|
@ -275,7 +272,7 @@ class VariablesView( object ):
|
|||
self._DrawWatchResult( 2, watch )
|
||||
|
||||
def _DrawScope( self, indent, scope ):
|
||||
icon = '+' if ( scope[ 'variablesReference' ] > 0 and
|
||||
icon = '+' if ( scope.get( 'variablesReference', 0 ) > 0 and
|
||||
'_variables' not in scope ) else '-'
|
||||
|
||||
line = utils.AppendToBuffer( self._vars.win.buffer,
|
||||
|
|
@ -294,7 +291,7 @@ class VariablesView( object ):
|
|||
|
||||
result = watch[ '_result' ]
|
||||
|
||||
icon = '+' if ( result[ 'variablesReference' ] > 0 and
|
||||
icon = '+' if ( result.get( 'variablesReference', 0 ) > 0 and
|
||||
'_variables' not in result ) else '-'
|
||||
|
||||
line = '{0}{1} Result: {2} '.format( ' ' * indent,
|
||||
|
|
@ -347,7 +344,6 @@ class VariablesView( object ):
|
|||
# TODO: this result count be expandable, but we have no way to allow the
|
||||
# user to interact with the balloon to expand it.
|
||||
body = message[ 'body' ]
|
||||
ref = body.get( 'variablesReference', 0 )
|
||||
display = [
|
||||
'Type: ' + body.get( 'type', '<unknown>' ),
|
||||
'Value: ' + body[ 'result' ]
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue