@@ -59,6 +59,7 @@ module.exports.create = function(logger_, config_, fileStats_) {
5959 var config = null ;
6060 var fileStats = null ;
6161 var breakpoints = { } ;
62+ // Entries map breakpoint id to { enabled: <bool>, listener: <function> }
6263 var listeners = { } ;
6364 var numBreakpoints = 0 ;
6465 // Before V8 4.5, having a debug listener active disables optimization. To
@@ -189,7 +190,7 @@ module.exports.create = function(logger_, config_, fileStats_) {
189190 var num = breakpoints [ breakpoint . id ] . v8Breakpoint . number ( ) ;
190191 var listener = onBreakpointHit . bind (
191192 null , breakpoint , function ( err ) {
192- delete listeners [ num ] ;
193+ listeners [ num ] . enabled = false ;
193194 // This method is called from the debug event listener, which
194195 // swallows all exception. We defer the callback to make sure the
195196 // user errors aren't silenced.
@@ -198,7 +199,7 @@ module.exports.create = function(logger_, config_, fileStats_) {
198199 } ) ;
199200 } ) ;
200201
201- listeners [ num ] = listener ;
202+ listeners [ num ] = { enabled : true , listener : listener } ;
202203 } ,
203204
204205 /**
@@ -211,7 +212,7 @@ module.exports.create = function(logger_, config_, fileStats_) {
211212 null , breakpoint ,
212213 createLogpointHandler ( breakpoint , format , shouldStop , listener ) ) ;
213214
214- listeners [ num ] = listener ;
215+ listeners [ num ] = { enabled : true , listener : listener } ;
215216 } ,
216217
217218 // The following are for testing:
@@ -341,12 +342,12 @@ module.exports.create = function(logger_, config_, fileStats_) {
341342 logsThisSecond ++ ;
342343 console . log ( 'LOGPOINT:' , message ) ;
343344 if ( shouldStop ( ) ) {
344- delete listeners [ num ] ;
345+ listeners [ num ] . enabled = false ;
345346 } else {
346347 if ( logsThisSecond > config . log . maxLogsPerSecond ) {
347- delete listeners [ num ] ;
348+ listeners [ num ] . enabled = false ;
348349 setTimeout ( function ( ) {
349- listeners [ num ] = listener ;
350+ listeners [ num ] . enabled = true ;
350351 } , config . log . logDelaySeconds * 1000 ) ;
351352 }
352353 }
@@ -506,14 +507,20 @@ module.exports.create = function(logger_, config_, fileStats_) {
506507 * @param {Debug#BreakEvent } eventData
507508 */
508509 function handleDebugEvents ( evt , execState , eventData ) {
509- switch ( evt ) {
510- case v8 . DebugEvent . Break :
511- eventData . breakPointsHit ( ) . forEach ( function ( hit ) {
512- var num = hit . script_break_point ( ) . number ( ) ;
513- logger . info ( '>>>V8 breakpoint hit<<< number: ' + num ) ;
514- listeners [ num ] ( execState , eventData ) ;
515- } ) ;
516- break ;
510+ try {
511+ switch ( evt ) {
512+ case v8 . DebugEvent . Break :
513+ eventData . breakPointsHit ( ) . forEach ( function ( hit ) {
514+ var num = hit . script_break_point ( ) . number ( ) ;
515+ if ( listeners [ num ] . enabled ) {
516+ logger . info ( '>>>V8 breakpoint hit<<< number: ' + num ) ;
517+ listeners [ num ] . listener ( execState , eventData ) ;
518+ }
519+ } ) ;
520+ break ;
521+ }
522+ } catch ( e ) {
523+ logger . warn ( 'Internal V8 error on breakpoint event: ' + e ) ;
517524 }
518525 }
519526
0 commit comments