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 ),
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue