From 19312c1631c2cade977c6e94398c5b08361bb717 Mon Sep 17 00:00:00 2001 From: yangguo Date: Mon, 18 May 2015 21:56:19 -0700 Subject: [PATCH] Do not clear stepping after DebugEvaluate. Clearing stepping was originally introduced in http://codereview.chromium.org/7889039 But DebugEvaluate now also uses a DisableBreak scope, which makes sure we don't step inside the evaluated code. R=yurys@chromium.org BUG=chromium:467180 LOG=N Review URL: https://codereview.chromium.org/1129363003 Cr-Commit-Position: refs/heads/master@{#28461} --- src/runtime/runtime-debug.cc | 2 -- test/mjsunit/regress/regress-crbug-467180.js | 41 ++++++++++++++++++++++++++++ 2 files changed, 41 insertions(+), 2 deletions(-) create mode 100644 test/mjsunit/regress/regress-crbug-467180.js diff --git a/src/runtime/runtime-debug.cc b/src/runtime/runtime-debug.cc index 637fdb8..0091dc8 100644 --- a/src/runtime/runtime-debug.cc +++ b/src/runtime/runtime-debug.cc @@ -2447,8 +2447,6 @@ static MaybeHandle DebugEvaluate(Isolate* isolate, result = Handle::cast(PrototypeIterator::GetCurrent(iter)); } - // Clear the oneshot breakpoints so that the debugger does not step further. - isolate->debug()->ClearStepping(); return result; } diff --git a/test/mjsunit/regress/regress-crbug-467180.js b/test/mjsunit/regress/regress-crbug-467180.js new file mode 100644 index 0000000..fcf5c30 --- /dev/null +++ b/test/mjsunit/regress/regress-crbug-467180.js @@ -0,0 +1,41 @@ +// 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. + +// Flags: --expose-debug-as debug + +function f() { + for (var i = 10; i < 14; i++) { // 1 + i; // 2 + } +} // 3 + +var state = "conditional"; +var log = []; +var exception = null; + +function listener(event, exec_state, event_data, data) { + if (event != Debug.DebugEvent.Break) return; + try { + var label = +exec_state.frame(0).sourceLineText().substr(-1); + log.push(label); + if (label == 2) log.push(exec_state.frame(0).evaluate("i").value()); + exec_state.prepareStep(Debug.StepAction.StepNext, 1); + } catch (e) { + exception = e; + print("Caught something. " + e + " " + e.stack); + }; +}; + + +var Debug = debug.Debug; +Debug.setListener(listener); + +Debug.setBreakPoint(f, 2, 0, "i == 12"); + +f(); + +Debug.setListener(null); // 4 + +assertEquals([2,12,1,1,2,13,1,1,3,4], log); +assertNull(exception); -- 2.7.4