breakpoint-multi-02.js (1073B)
1 // After clearing one breakpoint, another breakpoint at the same instruction still works. 2 3 var g = newGlobal({newCompartment: true}); 4 var dbg = Debugger(g); 5 var script = null; 6 var handlers = []; 7 dbg.onDebuggerStatement = function (frame) { 8 function handler(i) { 9 return {hit: function (frame) { g.log += '' + i; }}; 10 } 11 var f = frame.eval("f").return; 12 var s = f.script; 13 if (script === null) 14 script = s; 15 else 16 assertEq(s, script); 17 18 var offs = s.getLineOffsets(g.line0 + 3); 19 for (var i = 0; i < 3; i++) { 20 handlers[i] = handler(i); 21 for (var j = 0; j < offs.length; j++) 22 s.setBreakpoint(offs[j], handlers[i]); 23 } 24 }; 25 26 g.eval("var line0 = Error().lineNumber;\n" + 27 "function f() {\n" + // line0 + 1 28 " log += 'x';\n" + // line0 + 2 29 " log += 'y';\n" + // line0 + 3 30 "}\n" + 31 "debugger;\n"); 32 assertEq(handlers.length, 3); 33 34 g.log = ''; 35 g.f(); 36 assertEq(g.log, 'x012y'); 37 38 script.clearBreakpoint(handlers[0]); 39 40 g.log = ''; 41 g.f(); 42 assertEq(g.log, 'x12y');