diff --git a/.vimspector.json b/.vimspector.json index 4d5d33b..5f7a93d 100644 --- a/.vimspector.json +++ b/.vimspector.json @@ -9,7 +9,7 @@ }, "cppdbg": { "name": "cppdbg", - "command": [ "$HOME/.vscode/extensions/ms-vscode.cpptools-0.17.4/debugAdapters/OpenDebugAD7" ], + "command": [ "$HOME/.vscode/extensions/ms-vscode.cpptools-0.20.1/debugAdapters/OpenDebugAD7" ], "attach": { "pidProperty": "processId", "pidSelect": "ask" @@ -49,7 +49,7 @@ "target": "support/test/cpp/simple_c_program/test", "args": [], "cwd": ".", - "lldbmipath": "$HOME/.vscode/extensions/ms-vscode.cpptools-0.17.4/debugAdapters/lldb/bin/lldb-mi", + "lldbmipath": "$HOME/.vscode/extensions/ms-vscode.cpptools-0.20.1/debugAdapters/lldb/bin/lldb-mi", "trace": true, "logFilePath": "$HOME/.vimspector.protocol.log" } diff --git a/README.md b/README.md index 9acc53a..05f9a34 100644 --- a/README.md +++ b/README.md @@ -283,7 +283,7 @@ not always (or not completely). "name": "python", "command": [ "node", - "/out/client/debugger/Main.js" + "/out/client/debugger/debugAdapter/main.js" ] } ... diff --git a/python3/vimspector/debug_adapter_connection.py b/python3/vimspector/debug_adapter_connection.py index baca838..1932b5c 100644 --- a/python3/vimspector/debug_adapter_connection.py +++ b/python3/vimspector/debug_adapter_connection.py @@ -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: diff --git a/python3/vimspector/debug_session.py b/python3/vimspector/debug_session.py index f380cd7..f3b9cd0 100644 --- a/python3/vimspector/debug_session.py +++ b/python3/vimspector/debug_session.py @@ -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() diff --git a/python3/vimspector/output.py b/python3/vimspector/output.py index 2f3f24f..1637384 100644 --- a/python3/vimspector/output.py +++ b/python3/vimspector/output.py @@ -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', diff --git a/python3/vimspector/stack_trace.py b/python3/vimspector/stack_trace.py index f11f611..920f0da 100644 --- a/python3/vimspector/stack_trace.py +++ b/python3/vimspector/stack_trace.py @@ -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': '' } + if 'name' not in source: + source[ 'name' ] = os.path.basename( source[ 'path' ] ) + line = utils.AppendToBuffer( self._buf, ' {0}: {1}@{2}:{3}'.format( frame[ 'id' ], diff --git a/python3/vimspector/variables.py b/python3/vimspector/variables.py index eb4bd4e..fd4bbfd 100644 --- a/python3/vimspector/variables.py +++ b/python3/vimspector/variables.py @@ -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', '' ), @@ -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', '' ), 'Value: ' + body[ 'result' ] diff --git a/tox.ini b/tox.ini index 25919d2..dbd9626 100644 --- a/tox.ini +++ b/tox.ini @@ -1,3 +1,3 @@ [flake8] -ignore = E111,E114,E121,E125,E126,E127,E128,E129,E131,E133,E201,E202,E203,E211,E221,E222,E241,E251,E261,E303,E402,W503 +ignore = E111,E114,E121,E125,E126,E127,E128,E129,E131,E133,E201,E202,E203,E211,E221,E222,E241,E251,E261,E303,E402,W503,W504 max-line-length = 80