v8/test/debugger/debug/debug-evaluate-declaration.js
jgruber b32ee40de8 [debug-wrapper] Conditional breaks, locals, evaluate, scopes
This CL adds support for:
* conditional breaks in setBreakpoint,
* locals in frame.local{Count,Name,Value},
* evaluation on a frame in frame.evaluate,
* and more detailed scope information in scopeObject.

Uses of several functions that are not covered by the
inspector protocol and are only used in tests have been removed.

Local handling has been modified to also include arguments as locals.
Inspector differs in this regard from our FrameDetails in that
arguments are always shown as locals. Argument-related functions
were removed.

BUG=v8:5530

Review-Url: https://codereview.chromium.org/2491543002
Cr-Commit-Position: refs/heads/master@{#40917}
2016-11-11 12:08:34 +00:00

44 lines
1.2 KiB
JavaScript

// Copyright 2015 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.
// Test that debug-evaluate only resolves variables that are used by
// the function inside which we debug-evaluate. This is to avoid
// incorrect variable resolution when a context-allocated variable is
// shadowed by a stack-allocated variable.
"use strict";
var Debug = debug.Debug
var exception = null;
function listener(event, exec_state, event_data, data) {
if (event != Debug.DebugEvent.Break) return;
try {
exec_state.frame(0).evaluate("var x = 2");
exec_state.frame(0).evaluate("'use strict'; let y = 3");
exec_state.frame(0).evaluate("var z = 4");
exec_state.frame(0).evaluate("function bar() { return 5; }");
} catch (e) {
exception = e;
print(e + e.stack);
}
}
Debug.setListener(listener);
var z = 1;
(function() {
debugger;
})();
assertEquals(2, x); // declaration
assertThrows(() => y, ReferenceError); // let-declaration does not stick
assertEquals(4, z); // re-declaration
assertEquals(5, bar()); // function declaration
Debug.setListener(null);
assertNull(exception);