Commit de5aaad6 authored by kozyatinskiy's avatar kozyatinskiy Committed by Commit bot

[Debugger] Fix StepNext over function with caught exception

Without CL debugger on StepNext adds breakpoint to function where throw instruction is located. In case of StepNext we will skip pause in this function because StepNext shouldn't break in a deeper frame.

BUG=chromium:604495
R=yangguo@chromium.org
LOG=N

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

Cr-Commit-Position: refs/heads/master@{#35627}
parent e2ec04d2
......@@ -956,6 +956,14 @@ void Debug::PrepareStepOnThrow() {
it.Advance();
}
if (last_step_action() == StepNext) {
while (!it.done()) {
Address current_fp = it.frame()->UnpaddedFP();
if (current_fp >= thread_local_.target_fp_) break;
it.Advance();
}
}
// Find the closest Javascript frame we can flood with one-shots.
while (!it.done() &&
!it.frame()->function()->shared()->IsSubjectToDebugging()) {
......
......@@ -8185,3 +8185,36 @@ TEST(DebugStepNextTailCallEliminiation) {
ExpectString("JSON.stringify(log)",
"[\"a4\",\"b2\",\"c4\",\"e0\",\"e0\",\"e0\",\"e0\",\"f0\"]");
}
size_t current_action = 0;
StepAction actions[] = {StepNext, StepNext};
static void DebugStepOverFunctionWithCaughtExceptionListener(
const v8::Debug::EventDetails& event_details) {
v8::DebugEvent event = event_details.GetEvent();
if (event != v8::Break) return;
++break_point_hit_count;
if (current_action >= 2) return;
PrepareStep(actions[current_action]);
}
TEST(DebugStepOverFunctionWithCaughtException) {
i::FLAG_allow_natives_syntax = true;
DebugLocalContext env;
v8::Isolate* isolate = env->GetIsolate();
v8::HandleScope scope(isolate);
v8::Debug::SetDebugEventListener(
isolate, DebugStepOverFunctionWithCaughtExceptionListener);
break_point_hit_count = 0;
CompileRun(
"function foo() {\n"
" try { throw new Error(); } catch (e) {}\n"
"}\n"
"debugger;\n"
"foo();\n"
"foo();\n");
v8::Debug::SetDebugEventListener(env->GetIsolate(), nullptr);
CHECK_EQ(break_point_hit_count, 4);
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment