|
1 // After clearing one breakpoint, another breakpoint at the same instruction still works. |
|
2 |
|
3 var g = newGlobal(); |
|
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'); |