Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(453)

Side by Side Diff: src/debug/debug.cc

Issue 2655253004: [inspector] introduced stepIntoAsync for chained callbacks (Closed)
Patch Set: fixed async/await and added tests Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/debug/debug.h ('k') | src/debug/debug-interface.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "src/debug/debug.h" 5 #include "src/debug/debug.h"
6 6
7 #include <memory> 7 #include <memory>
8 8
9 #include "src/api.h" 9 #include "src/api.h"
10 #include "src/arguments.h" 10 #include "src/arguments.h"
(...skipping 1704 matching lines...) Expand 10 before | Expand all | Expand 10 after
1715 } 1715 }
1716 } // anonymous namespace 1716 } // anonymous namespace
1717 1717
1718 bool Debug::IsExceptionBlackboxed(bool uncaught) { 1718 bool Debug::IsExceptionBlackboxed(bool uncaught) {
1719 JavaScriptFrameIterator it(isolate_); 1719 JavaScriptFrameIterator it(isolate_);
1720 if (it.done()) return false; 1720 if (it.done()) return false;
1721 // Uncaught exception is blackboxed if all current frames are blackboxed, 1721 // Uncaught exception is blackboxed if all current frames are blackboxed,
1722 // caught exception if top frame is blackboxed. 1722 // caught exception if top frame is blackboxed.
1723 bool is_top_frame_blackboxed = IsFrameBlackboxed(it.frame()); 1723 bool is_top_frame_blackboxed = IsFrameBlackboxed(it.frame());
1724 if (!uncaught || !is_top_frame_blackboxed) return is_top_frame_blackboxed; 1724 if (!uncaught || !is_top_frame_blackboxed) return is_top_frame_blackboxed;
1725 it.Advance(); 1725 return !HasNonBlackboxedFrameOnStack();
1726 while (!it.done()) {
1727 if (!IsFrameBlackboxed(it.frame())) return false;
1728 it.Advance();
1729 }
1730 return true;
1731 } 1726 }
1732 1727
1733 bool Debug::IsFrameBlackboxed(JavaScriptFrame* frame) { 1728 bool Debug::IsFrameBlackboxed(JavaScriptFrame* frame) {
1734 HandleScope scope(isolate_); 1729 HandleScope scope(isolate_);
1735 if (!frame->HasInlinedFrames()) { 1730 if (!frame->HasInlinedFrames()) {
1736 Handle<SharedFunctionInfo> shared(frame->function()->shared(), isolate_); 1731 Handle<SharedFunctionInfo> shared(frame->function()->shared(), isolate_);
1737 return IsBlackboxed(shared); 1732 return IsBlackboxed(shared);
1738 } 1733 }
1739 List<Handle<SharedFunctionInfo>> infos; 1734 List<Handle<SharedFunctionInfo>> infos;
1740 frame->GetFunctions(&infos); 1735 frame->GetFunctions(&infos);
(...skipping 234 matching lines...) Expand 10 before | Expand all | Expand 10 after
1975 is_blackboxed = debug_delegate_->IsFunctionBlackboxed( 1970 is_blackboxed = debug_delegate_->IsFunctionBlackboxed(
1976 ToApiHandle<debug::Script>(script), start, end); 1971 ToApiHandle<debug::Script>(script), start, end);
1977 } 1972 }
1978 } 1973 }
1979 shared->set_debug_is_blackboxed(is_blackboxed); 1974 shared->set_debug_is_blackboxed(is_blackboxed);
1980 shared->set_computed_debug_is_blackboxed(true); 1975 shared->set_computed_debug_is_blackboxed(true);
1981 } 1976 }
1982 return shared->debug_is_blackboxed(); 1977 return shared->debug_is_blackboxed();
1983 } 1978 }
1984 1979
1980 bool Debug::HasPromiseBuiltinOnStack() {
1981 for (JavaScriptFrameIterator it(isolate_); !it.done(); it.Advance()) {
1982 List<SharedFunctionInfo*> raw_shareds;
1983 it.frame()->GetFunctions(&raw_shareds);
1984 for (int i = 0; i < raw_shareds.length(); ++i) {
1985 if (raw_shareds[i]->is_promise_builtin()) return true;
1986 }
1987 }
1988 return false;
1989 }
1990
1991 bool Debug::HasNonBlackboxedFrameOnStack() {
1992 HandleScope scope(isolate_);
1993 for (StackTraceFrameIterator it(isolate_); !it.done(); it.Advance()) {
1994 if (!it.is_javascript()) continue;
1995 if (!IsFrameBlackboxed(it.javascript_frame())) return true;
1996 }
1997 return false;
1998 }
1999
1985 void Debug::OnAsyncTaskEvent(debug::PromiseDebugActionType type, int id, 2000 void Debug::OnAsyncTaskEvent(debug::PromiseDebugActionType type, int id,
1986 int parent_id) { 2001 int parent_id) {
1987 if (in_debug_scope() || ignore_events()) return; 2002 if (in_debug_scope() || ignore_events()) return;
1988 if (!debug_delegate_) return; 2003 if (!debug_delegate_) return;
1989 SuppressDebug while_processing(this); 2004 SuppressDebug while_processing(this);
1990 DebugScope debug_scope(isolate_->debug()); 2005 DebugScope debug_scope(isolate_->debug());
1991 if (debug_scope.failed()) return; 2006 if (debug_scope.failed()) return;
1992 HandleScope scope(isolate_); 2007 HandleScope scope(isolate_);
1993 PostponeInterruptsScope no_interrupts(isolate_); 2008 PostponeInterruptsScope no_interrupts(isolate_);
1994 DisableBreak no_recursive_break(this); 2009 DisableBreak no_recursive_break(this);
1995 debug_delegate_->PromiseEventOccurred(type, id, parent_id); 2010 // Promise.all and Promise.race implementations use .then internally,
2011 // we don't allow to break on these calls.
2012 bool breakable = type == debug::kDebugPromiseCreated &&
2013 !HasPromiseBuiltinOnStack() &&
2014 HasNonBlackboxedFrameOnStack();
2015 debug_delegate_->PromiseEventOccurred(
2016 Utils::ToLocal(debug_scope.GetContext()), type, id, parent_id, breakable);
1996 } 2017 }
1997 2018
1998 void Debug::ProcessCompileEvent(v8::DebugEvent event, Handle<Script> script) { 2019 void Debug::ProcessCompileEvent(v8::DebugEvent event, Handle<Script> script) {
1999 if (ignore_events()) return; 2020 if (ignore_events()) return;
2000 if (script->type() != i::Script::TYPE_NORMAL && 2021 if (script->type() != i::Script::TYPE_NORMAL &&
2001 script->type() != i::Script::TYPE_WASM) { 2022 script->type() != i::Script::TYPE_WASM) {
2002 return; 2023 return;
2003 } 2024 }
2004 if (!debug_delegate_) return; 2025 if (!debug_delegate_) return;
2005 SuppressDebug while_processing(this); 2026 SuppressDebug while_processing(this);
(...skipping 253 matching lines...) Expand 10 before | Expand all | Expand 10 after
2259 DCHECK(isolate_->needs_side_effect_check()); 2280 DCHECK(isolate_->needs_side_effect_check());
2260 if (DebugEvaluate::CallbackHasNoSideEffect(function)) return true; 2281 if (DebugEvaluate::CallbackHasNoSideEffect(function)) return true;
2261 side_effect_check_failed_ = true; 2282 side_effect_check_failed_ = true;
2262 // Throw an uncatchable termination exception. 2283 // Throw an uncatchable termination exception.
2263 isolate_->TerminateExecution(); 2284 isolate_->TerminateExecution();
2264 isolate_->OptionalRescheduleException(false); 2285 isolate_->OptionalRescheduleException(false);
2265 return false; 2286 return false;
2266 } 2287 }
2267 2288
2268 void LegacyDebugDelegate::PromiseEventOccurred( 2289 void LegacyDebugDelegate::PromiseEventOccurred(
2269 v8::debug::PromiseDebugActionType type, int id, int parent_id) { 2290 v8::Local<v8::Context> context, v8::debug::PromiseDebugActionType type,
2291 int id, int parent_id, bool breakable) {
2270 Handle<Object> event_data; 2292 Handle<Object> event_data;
2271 if (isolate_->debug()->MakeAsyncTaskEvent(type, id).ToHandle(&event_data)) { 2293 if (isolate_->debug()->MakeAsyncTaskEvent(type, id).ToHandle(&event_data)) {
2272 ProcessDebugEvent(v8::AsyncTaskEvent, Handle<JSObject>::cast(event_data)); 2294 ProcessDebugEvent(v8::AsyncTaskEvent, Handle<JSObject>::cast(event_data));
2273 } 2295 }
2274 } 2296 }
2275 2297
2276 void LegacyDebugDelegate::ScriptCompiled(v8::Local<v8::debug::Script> script, 2298 void LegacyDebugDelegate::ScriptCompiled(v8::Local<v8::debug::Script> script,
2277 bool is_compile_error) { 2299 bool is_compile_error) {
2278 Handle<Object> event_data; 2300 Handle<Object> event_data;
2279 v8::DebugEvent event = is_compile_error ? v8::CompileError : v8::AfterCompile; 2301 v8::DebugEvent event = is_compile_error ? v8::CompileError : v8::AfterCompile;
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after
2413 isolate_->Throw(*isolate_->factory()->NewEvalError( 2435 isolate_->Throw(*isolate_->factory()->NewEvalError(
2414 MessageTemplate::kNoSideEffectDebugEvaluate)); 2436 MessageTemplate::kNoSideEffectDebugEvaluate));
2415 } 2437 }
2416 isolate_->set_needs_side_effect_check(old_needs_side_effect_check_); 2438 isolate_->set_needs_side_effect_check(old_needs_side_effect_check_);
2417 isolate_->debug()->UpdateHookOnFunctionCall(); 2439 isolate_->debug()->UpdateHookOnFunctionCall();
2418 isolate_->debug()->side_effect_check_failed_ = false; 2440 isolate_->debug()->side_effect_check_failed_ = false;
2419 } 2441 }
2420 2442
2421 } // namespace internal 2443 } // namespace internal
2422 } // namespace v8 2444 } // namespace v8
OLDNEW
« no previous file with comments | « src/debug/debug.h ('k') | src/debug/debug-interface.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698