| // Copyright 2016 the V8 project authors. All rights reserved. | |
| // Use of this source code is governed by a BSD-style license that can be | |
| // found in the LICENSE file. | |
| var Debug = debug.Debug; | |
| var break_count = 0; | |
| var exception_count = 0; | |
| function assertCount(expected_breaks, expected_exceptions) { | |
| assertEquals(expected_breaks, break_count); | |
| assertEquals(expected_exceptions, exception_count); | |
| } | |
| function listener(event, exec_state, event_data, data) { | |
| if (event == Debug.DebugEvent.Break) { | |
| break_count++; | |
| } else if (event == Debug.DebugEvent.Exception) { | |
| exception_count++; | |
| } | |
| } | |
| function f(x) { | |
| debugger; | |
| return x + 1; | |
| } | |
| function g(x) { | |
| try { | |
| throw x; | |
| } catch (e) { | |
| } | |
| } | |
| function h(x) { | |
| var a = undefined; | |
| try { | |
| var x = a(); | |
| } catch (e) { | |
| } | |
| } | |
| Debug.setListener(listener); | |
| assertCount(0, 0); | |
| f(0); | |
| assertCount(1, 0); | |
| g(0); | |
| assertCount(1, 0); | |
| Debug.setBreakOnException(); | |
| f(0); | |
| assertCount(2, 0); | |
| g(0); | |
| assertCount(2, 1); | |
| Debug.setBreakPoint(f, 1, 0, "x == 1"); | |
| f(1); | |
| assertCount(3, 1); | |
| f(2); | |
| assertCount(3, 1); | |
| f(1); | |
| assertCount(4, 1); | |
| assertThrows(() => Debug.setBreakPoint(f, 1, 0, "x > 0")); | |
| f(1); | |
| assertCount(5, 2); | |
| f(0); | |
| assertCount(5, 2); | |
| Debug.setBreakPoint(g, 2, 0, "1 == 2"); | |
| g(1); | |
| assertCount(5, 2); | |
| assertThrows(() => Debug.setBreakPoint(g, 2, 0, "x == 1")); | |
| g(1); | |
| assertCount(5, 3); | |
| g(2); | |
| assertCount(5, 3); | |
| g(1); | |
| assertCount(5, 3); | |
| assertThrows(() => Debug.setBreakPoint(g, 2, 0, "x > 0")); | |
| g(1); | |
| assertCount(5, 4); | |
| g(0); | |
| assertCount(5, 4); | |
| h(0); | |
| assertCount(5, 5); | |
| Debug.setBreakPoint(h, 3, 0, "x > 0"); | |
| h(1); | |
| assertCount(6, 6); | |
| h(0); | |
| assertCount(6, 6); | |
| Debug.clearBreakOnException(); | |
| Debug.setListener(null); |