Fix breakpoint event
Few problems:
- we were passing a dict instead of a list of breakpoints
- if the breakpoint had a source which was {} we crashed
- we didn't support the 'removed' event
This commit is contained in:
parent
f6726de058
commit
16f22b396f
3 changed files with 72 additions and 12 deletions
|
|
@ -166,25 +166,29 @@ class CodeView( object ):
|
|||
|
||||
def AddBreakpoints( self, source, breakpoints ):
|
||||
for breakpoint in breakpoints:
|
||||
if 'source' not in breakpoint:
|
||||
if source:
|
||||
breakpoint[ 'source' ] = source
|
||||
else:
|
||||
self._logger.warn( 'missing source in breakpoint {0}'.format(
|
||||
json.dumps( breakpoint ) ) )
|
||||
continue
|
||||
source = breakpoint.get( 'source' ) or source
|
||||
if not source or 'path' not in source:
|
||||
self._logger.warn( 'missing source/path in breakpoint {0}'.format(
|
||||
json.dumps( breakpoint ) ) )
|
||||
continue
|
||||
|
||||
self._breakpoints[ breakpoint[ 'source' ][ 'path' ] ].append(
|
||||
breakpoint )
|
||||
breakpoint[ 'source' ] = source
|
||||
self._breakpoints[ source[ 'path' ] ].append( breakpoint )
|
||||
|
||||
self._logger.debug( 'Breakpoints at this point: {0}'.format(
|
||||
json.dumps( self._breakpoints, indent = 2 ) ) )
|
||||
|
||||
self.ShowBreakpoints()
|
||||
|
||||
|
||||
def AddBreakpoint( self, breakpoint ):
|
||||
self.AddBreakpoints( None, [ breakpoint ] )
|
||||
|
||||
|
||||
def UpdateBreakpoint( self, bp ):
|
||||
if 'id' not in bp:
|
||||
self.AddBreakpoints( None, [ bp ] )
|
||||
self.AddBreakpoint( bp )
|
||||
return
|
||||
|
||||
for _, breakpoint_list in self._breakpoints.items():
|
||||
for index, breakpoint in enumerate( breakpoint_list ):
|
||||
|
|
@ -194,7 +198,22 @@ class CodeView( object ):
|
|||
return
|
||||
|
||||
# Not found. Assume new
|
||||
self.AddBreakpoints( None, [ bp ] )
|
||||
self.AddBreakpoint( bp )
|
||||
|
||||
|
||||
def RemoveBreakpoint( self, bp ):
|
||||
for _, breakpoint_list in self._breakpoints.items():
|
||||
found_index = None
|
||||
for index, breakpoint in enumerate( breakpoint_list ):
|
||||
if 'id' in breakpoint and breakpoint[ 'id' ] == bp[ 'id' ]:
|
||||
found_index = index
|
||||
break
|
||||
|
||||
if found_index is not None:
|
||||
del breakpoint_list[ found_index ]
|
||||
self.ShowBreakpoints()
|
||||
return
|
||||
|
||||
|
||||
def _UndisplaySigns( self ):
|
||||
for sign_id in self._signs[ 'breakpoints' ]:
|
||||
|
|
|
|||
|
|
@ -1050,7 +1050,9 @@ class DebugSession( object ):
|
|||
if reason == 'changed':
|
||||
self._codeView.UpdateBreakpoint( bp )
|
||||
elif reason == 'new':
|
||||
self._codeView.AddBreakpoints( None, bp )
|
||||
self._codeView.AddBreakpoint( bp )
|
||||
elif reason == 'removed':
|
||||
self._codeView.RemoveBreakpoint( bp )
|
||||
else:
|
||||
utils.UserMessage(
|
||||
'Unrecognised breakpoint event (undocumented): {0}'.format( reason ),
|
||||
|
|
|
|||
39
tests/testdata/cpp/simple/.vimspector.json
vendored
39
tests/testdata/cpp/simple/.vimspector.json
vendored
|
|
@ -68,6 +68,45 @@
|
|||
"CALCULATED_STR", "${CALCULATED_STR}"
|
||||
]
|
||||
}
|
||||
},
|
||||
"lldb-vscode": {
|
||||
"adapter": "lldb-vscode",
|
||||
"configuration": {
|
||||
"request": "launch",
|
||||
"program": "${workspaceRoot}/${fileBasenameNoExtension}",
|
||||
"cwd": "${workspaceRoot}",
|
||||
"externalConsole": false,
|
||||
"MIMode": "lldb"
|
||||
}
|
||||
},
|
||||
"CodeLLDB": {
|
||||
"adapter": "CodeLLDB",
|
||||
"configuration": {
|
||||
"request": "launch",
|
||||
"program": "${workspaceRoot}/${fileBasenameNoExtension}",
|
||||
"cwd": "${workspaceRoot}",
|
||||
"expressions": "native"
|
||||
}
|
||||
}
|
||||
},
|
||||
"adapters": {
|
||||
"lldb-vscode": {
|
||||
"variables": {
|
||||
"LLVM": {
|
||||
"shell": "brew --prefix llvm"
|
||||
}
|
||||
},
|
||||
"attach": {
|
||||
"pidProperty": "pid",
|
||||
"pidSelect": "ask"
|
||||
},
|
||||
"command": [
|
||||
"${LLVM}/bin/lldb-vscode"
|
||||
],
|
||||
"env": {
|
||||
"LLDB_LAUNCH_FLAG_LAUNCH_IN_TTY": "YES"
|
||||
},
|
||||
"name": "lldb"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue