v8/test/mjsunit/debug-negative-break-points.js
yangguo 0e4cae13f4 [debugger] negative conditional break points mute breaks and exceptions.
A break location is considered muted if it has break points, but their
conditions all evaluate to false. Aside from not triggering break
events, debugger statements and exceptions are also ignored.

R=verwaest@chromium.org
BUG=chromium:429167
LOG=Y

Review URL: https://codereview.chromium.org/1610073002

Cr-Commit-Position: refs/heads/master@{#33429}
2016-01-21 10:41:29 +00:00

84 lines
1.4 KiB
JavaScript

// 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.
// Flags: --expose-debug-as debug
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) {
}
}
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);
Debug.setBreakPoint(f, 1, 0, "x > 0");
f(1);
assertCount(5, 1);
f(0);
assertCount(5, 1);
Debug.setBreakPoint(g, 2, 0, "1 == 2");
g(1);
assertCount(5, 1);
Debug.setBreakPoint(g, 2, 0, "x == 1");
g(1);
assertCount(6, 2);
g(2);
assertCount(6, 2);
g(1);
assertCount(7, 3);
Debug.setBreakPoint(g, 2, 0, "x > 0");
g(1);
assertCount(8, 4);
g(0);
assertCount(8, 4);
Debug.clearBreakOnException();
Debug.setListener(null);