OLD | NEW |
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 822 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
833 while (debug_info_list_ != NULL) { | 833 while (debug_info_list_ != NULL) { |
834 RemoveDebugInfoAndClearFromShared(debug_info_list_->debug_info()); | 834 RemoveDebugInfoAndClearFromShared(debug_info_list_->debug_info()); |
835 } | 835 } |
836 } | 836 } |
837 | 837 |
838 void Debug::FloodWithOneShot(Handle<JSFunction> function, | 838 void Debug::FloodWithOneShot(Handle<JSFunction> function, |
839 BreakLocatorType type) { | 839 BreakLocatorType type) { |
840 // Debug utility functions are not subject to debugging. | 840 // Debug utility functions are not subject to debugging. |
841 if (function->native_context() == *debug_context()) return; | 841 if (function->native_context() == *debug_context()) return; |
842 | 842 |
843 if (!function->shared()->IsSubjectToDebugging()) { | 843 if (!function->shared()->IsSubjectToDebugging() || |
| 844 IsBlackboxed(function->shared())) { |
844 // Builtin functions are not subject to stepping, but need to be | 845 // Builtin functions are not subject to stepping, but need to be |
845 // deoptimized, because optimized code does not check for debug | 846 // deoptimized, because optimized code does not check for debug |
846 // step in at call sites. | 847 // step in at call sites. |
847 Deoptimizer::DeoptimizeFunction(*function); | 848 Deoptimizer::DeoptimizeFunction(*function); |
848 return; | 849 return; |
849 } | 850 } |
850 // Make sure the function is compiled and has set up the debug info. | 851 // Make sure the function is compiled and has set up the debug info. |
851 Handle<SharedFunctionInfo> shared(function->shared()); | 852 Handle<SharedFunctionInfo> shared(function->shared()); |
852 if (!EnsureDebugInfo(shared, function)) { | 853 if (!EnsureDebugInfo(shared, function)) { |
853 // Return if we failed to retrieve the debug info. | 854 // Return if we failed to retrieve the debug info. |
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
952 if (last_step_action() == StepNext || last_step_action() == StepOut) { | 953 if (last_step_action() == StepNext || last_step_action() == StepOut) { |
953 while (!it.done()) { | 954 while (!it.done()) { |
954 Address current_fp = it.frame()->UnpaddedFP(); | 955 Address current_fp = it.frame()->UnpaddedFP(); |
955 if (current_fp >= thread_local_.target_fp_) break; | 956 if (current_fp >= thread_local_.target_fp_) break; |
956 it.Advance(); | 957 it.Advance(); |
957 } | 958 } |
958 } | 959 } |
959 | 960 |
960 // Find the closest Javascript frame we can flood with one-shots. | 961 // Find the closest Javascript frame we can flood with one-shots. |
961 while (!it.done() && | 962 while (!it.done() && |
962 !it.frame()->function()->shared()->IsSubjectToDebugging()) { | 963 (!it.frame()->function()->shared()->IsSubjectToDebugging() || |
| 964 IsBlackboxed(it.frame()->function()->shared()))) { |
963 it.Advance(); | 965 it.Advance(); |
964 } | 966 } |
965 | 967 |
966 if (it.done()) return; // No suitable Javascript catch handler. | 968 if (it.done()) return; // No suitable Javascript catch handler. |
967 | 969 |
968 FloodWithOneShot(Handle<JSFunction>(it.frame()->function())); | 970 FloodWithOneShot(Handle<JSFunction>(it.frame()->function())); |
969 } | 971 } |
970 | 972 |
971 | 973 |
972 void Debug::PrepareStep(StepAction step_action) { | 974 void Debug::PrepareStep(StepAction step_action) { |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1012 return; | 1014 return; |
1013 } | 1015 } |
1014 | 1016 |
1015 Handle<DebugInfo> debug_info(shared->GetDebugInfo()); | 1017 Handle<DebugInfo> debug_info(shared->GetDebugInfo()); |
1016 BreakLocation location = BreakLocation::FromFrame(debug_info, frame); | 1018 BreakLocation location = BreakLocation::FromFrame(debug_info, frame); |
1017 | 1019 |
1018 // Any step at a return is a step-out. | 1020 // Any step at a return is a step-out. |
1019 if (location.IsReturn()) step_action = StepOut; | 1021 if (location.IsReturn()) step_action = StepOut; |
1020 // A step-next at a tail call is a step-out. | 1022 // A step-next at a tail call is a step-out. |
1021 if (location.IsTailCall() && step_action == StepNext) step_action = StepOut; | 1023 if (location.IsTailCall() && step_action == StepNext) step_action = StepOut; |
| 1024 // A step-next in blackboxed function is a step-out. |
| 1025 if (step_action == StepNext && IsBlackboxed(shared)) step_action = StepOut; |
1022 | 1026 |
1023 thread_local_.last_statement_position_ = | 1027 thread_local_.last_statement_position_ = |
1024 summary.abstract_code()->SourceStatementPosition(summary.code_offset()); | 1028 summary.abstract_code()->SourceStatementPosition(summary.code_offset()); |
1025 thread_local_.last_fp_ = frame->UnpaddedFP(); | 1029 thread_local_.last_fp_ = frame->UnpaddedFP(); |
1026 // No longer perform the current async step. | 1030 // No longer perform the current async step. |
1027 clear_suspended_generator(); | 1031 clear_suspended_generator(); |
1028 | 1032 |
1029 switch (step_action) { | 1033 switch (step_action) { |
1030 case StepNone: | 1034 case StepNone: |
1031 UNREACHABLE(); | 1035 UNREACHABLE(); |
1032 break; | 1036 break; |
1033 case StepOut: | 1037 case StepOut: |
1034 // Advance to caller frame. | 1038 // Advance to caller frame. |
1035 frames_it.Advance(); | 1039 frames_it.Advance(); |
1036 // Skip native and extension functions on the stack. | 1040 // Skip native and extension functions on the stack. |
1037 while (!frames_it.done() && | 1041 while ( |
1038 !frames_it.frame()->function()->shared()->IsSubjectToDebugging()) { | 1042 !frames_it.done() && |
| 1043 (!frames_it.frame()->function()->shared()->IsSubjectToDebugging() || |
| 1044 IsBlackboxed(frames_it.frame()->function()->shared()))) { |
1039 // Builtin functions are not subject to stepping, but need to be | 1045 // Builtin functions are not subject to stepping, but need to be |
1040 // deoptimized to include checks for step-in at call sites. | 1046 // deoptimized to include checks for step-in at call sites. |
1041 Deoptimizer::DeoptimizeFunction(frames_it.frame()->function()); | 1047 Deoptimizer::DeoptimizeFunction(frames_it.frame()->function()); |
1042 frames_it.Advance(); | 1048 frames_it.Advance(); |
1043 } | 1049 } |
1044 if (!frames_it.done()) { | 1050 if (!frames_it.done()) { |
1045 // Fill the caller function to return to with one-shot break points. | 1051 // Fill the caller function to return to with one-shot break points. |
1046 Handle<JSFunction> caller_function(frames_it.frame()->function()); | 1052 Handle<JSFunction> caller_function(frames_it.frame()->function()); |
1047 FloodWithOneShot(caller_function); | 1053 FloodWithOneShot(caller_function); |
1048 thread_local_.target_fp_ = frames_it.frame()->UnpaddedFP(); | 1054 thread_local_.target_fp_ = frames_it.frame()->UnpaddedFP(); |
(...skipping 695 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1744 // Bail out if exception breaks are not active | 1750 // Bail out if exception breaks are not active |
1745 if (uncaught) { | 1751 if (uncaught) { |
1746 // Uncaught exceptions are reported by either flags. | 1752 // Uncaught exceptions are reported by either flags. |
1747 if (!(break_on_uncaught_exception_ || break_on_exception_)) return; | 1753 if (!(break_on_uncaught_exception_ || break_on_exception_)) return; |
1748 } else { | 1754 } else { |
1749 // Caught exceptions are reported is activated. | 1755 // Caught exceptions are reported is activated. |
1750 if (!break_on_exception_) return; | 1756 if (!break_on_exception_) return; |
1751 } | 1757 } |
1752 | 1758 |
1753 { | 1759 { |
1754 // Check whether the break location is muted. | |
1755 JavaScriptFrameIterator it(isolate_); | 1760 JavaScriptFrameIterator it(isolate_); |
1756 if (!it.done() && IsMutedAtCurrentLocation(it.frame())) return; | 1761 // Check whether the top frame is blackboxed or the break location is muted. |
| 1762 if (!it.done() && (IsBlackboxed(it.frame()->function()->shared()) || |
| 1763 IsMutedAtCurrentLocation(it.frame()))) { |
| 1764 return; |
| 1765 } |
1757 } | 1766 } |
1758 | 1767 |
1759 DebugScope debug_scope(this); | 1768 DebugScope debug_scope(this); |
1760 if (debug_scope.failed()) return; | 1769 if (debug_scope.failed()) return; |
1761 | 1770 |
1762 if (debug_event_listener_) { | 1771 if (debug_delegate_) { |
1763 HandleScope scope(isolate_); | 1772 HandleScope scope(isolate_); |
1764 | 1773 |
1765 // Create the execution state. | 1774 // Create the execution state. |
1766 Handle<Object> exec_state; | 1775 Handle<Object> exec_state; |
1767 // Bail out and don't call debugger if exception. | 1776 // Bail out and don't call debugger if exception. |
1768 if (!MakeExecutionState().ToHandle(&exec_state)) return; | 1777 if (!MakeExecutionState().ToHandle(&exec_state)) return; |
1769 | 1778 |
1770 debug_event_listener_->ExceptionThrown( | 1779 debug_delegate_->ExceptionThrown( |
1771 GetDebugEventContext(isolate_), | 1780 GetDebugEventContext(isolate_), |
1772 v8::Utils::ToLocal(Handle<JSObject>::cast(exec_state)), | 1781 v8::Utils::ToLocal(Handle<JSObject>::cast(exec_state)), |
1773 v8::Utils::ToLocal(exception), promise->IsJSObject(), uncaught); | 1782 v8::Utils::ToLocal(exception), promise->IsJSObject(), uncaught); |
1774 if (!non_inspector_listener_exists()) return; | 1783 if (!non_inspector_listener_exists()) return; |
1775 } | 1784 } |
1776 | 1785 |
1777 // Create the event data object. | 1786 // Create the event data object. |
1778 Handle<Object> event_data; | 1787 Handle<Object> event_data; |
1779 // Bail out and don't call debugger if exception. | 1788 // Bail out and don't call debugger if exception. |
1780 if (!MakeExceptionEvent( | 1789 if (!MakeExceptionEvent( |
1781 exception, uncaught, promise).ToHandle(&event_data)) { | 1790 exception, uncaught, promise).ToHandle(&event_data)) { |
1782 return; | 1791 return; |
1783 } | 1792 } |
1784 | 1793 |
1785 // Process debug event. | 1794 // Process debug event. |
1786 ProcessDebugEvent(v8::Exception, Handle<JSObject>::cast(event_data)); | 1795 ProcessDebugEvent(v8::Exception, Handle<JSObject>::cast(event_data)); |
1787 // Return to continue execution from where the exception was thrown. | 1796 // Return to continue execution from where the exception was thrown. |
1788 } | 1797 } |
1789 | 1798 |
1790 void Debug::OnDebugBreak(Handle<Object> break_points_hit) { | 1799 void Debug::OnDebugBreak(Handle<Object> break_points_hit) { |
1791 // The caller provided for DebugScope. | 1800 // The caller provided for DebugScope. |
1792 AssertDebugContext(); | 1801 AssertDebugContext(); |
1793 // Bail out if there is no listener for this event | 1802 // Bail out if there is no listener for this event |
1794 if (ignore_events()) return; | 1803 if (ignore_events()) return; |
1795 | 1804 |
1796 #ifdef DEBUG | 1805 #ifdef DEBUG |
1797 PrintBreakLocation(); | 1806 PrintBreakLocation(); |
1798 #endif // DEBUG | 1807 #endif // DEBUG |
1799 | 1808 |
1800 if (debug_event_listener_) { | 1809 if (debug_delegate_) { |
1801 HandleScope scope(isolate_); | 1810 HandleScope scope(isolate_); |
1802 | 1811 |
1803 // Create the execution state. | 1812 // Create the execution state. |
1804 Handle<Object> exec_state; | 1813 Handle<Object> exec_state; |
1805 // Bail out and don't call debugger if exception. | 1814 // Bail out and don't call debugger if exception. |
1806 if (!MakeExecutionState().ToHandle(&exec_state)) return; | 1815 if (!MakeExecutionState().ToHandle(&exec_state)) return; |
1807 | 1816 |
1808 bool previous = in_debug_event_listener_; | 1817 bool previous = in_debug_event_listener_; |
1809 in_debug_event_listener_ = true; | 1818 in_debug_event_listener_ = true; |
1810 debug_event_listener_->BreakProgramRequested( | 1819 debug_delegate_->BreakProgramRequested( |
1811 GetDebugEventContext(isolate_), | 1820 GetDebugEventContext(isolate_), |
1812 v8::Utils::ToLocal(Handle<JSObject>::cast(exec_state)), | 1821 v8::Utils::ToLocal(Handle<JSObject>::cast(exec_state)), |
1813 v8::Utils::ToLocal(break_points_hit)); | 1822 v8::Utils::ToLocal(break_points_hit)); |
1814 in_debug_event_listener_ = previous; | 1823 in_debug_event_listener_ = previous; |
1815 if (!non_inspector_listener_exists()) return; | 1824 if (!non_inspector_listener_exists()) return; |
1816 } | 1825 } |
1817 | 1826 |
1818 HandleScope scope(isolate_); | 1827 HandleScope scope(isolate_); |
1819 // Create the event data object. | 1828 // Create the event data object. |
1820 Handle<Object> event_data; | 1829 Handle<Object> event_data; |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1884 // Since we holding promise when at least one microtask is scheduled (inside | 1893 // Since we holding promise when at least one microtask is scheduled (inside |
1885 // PromiseReactionJobInfo), we can send cancel event in weak callback. | 1894 // PromiseReactionJobInfo), we can send cancel event in weak callback. |
1886 GlobalHandles::MakeWeak( | 1895 GlobalHandles::MakeWeak( |
1887 global_handle.location(), | 1896 global_handle.location(), |
1888 new CollectedCallbackData(global_handle.location(), async_id->value(), | 1897 new CollectedCallbackData(global_handle.location(), async_id->value(), |
1889 this, isolate_), | 1898 this, isolate_), |
1890 &ResetPromiseHandle, v8::WeakCallbackType::kParameter); | 1899 &ResetPromiseHandle, v8::WeakCallbackType::kParameter); |
1891 return async_id->value(); | 1900 return async_id->value(); |
1892 } | 1901 } |
1893 | 1902 |
| 1903 namespace { |
| 1904 debug::Location GetDebugLocation(Handle<Script> script, int source_position) { |
| 1905 Script::PositionInfo info; |
| 1906 Script::GetPositionInfo(script, source_position, &info, Script::WITH_OFFSET); |
| 1907 return debug::Location(info.line, info.column); |
| 1908 } |
| 1909 } // namespace |
| 1910 |
| 1911 bool Debug::IsBlackboxed(SharedFunctionInfo* shared) { |
| 1912 HandleScope scope(isolate_); |
| 1913 Handle<SharedFunctionInfo> shared_function_info(shared); |
| 1914 return IsBlackboxed(shared_function_info); |
| 1915 } |
| 1916 |
| 1917 bool Debug::IsBlackboxed(Handle<SharedFunctionInfo> shared) { |
| 1918 if (!debug_delegate_) return false; |
| 1919 if (!shared->computed_debug_is_blackboxed()) { |
| 1920 bool is_blackboxed = false; |
| 1921 if (shared->script()->IsScript()) { |
| 1922 HandleScope handle_scope(isolate_); |
| 1923 Handle<Script> script(Script::cast(shared->script())); |
| 1924 if (script->type() == i::Script::TYPE_NORMAL) { |
| 1925 debug::Location start = |
| 1926 GetDebugLocation(script, shared->start_position()); |
| 1927 debug::Location end = GetDebugLocation(script, shared->end_position()); |
| 1928 is_blackboxed = debug_delegate_->IsFunctionBlackboxed( |
| 1929 ToApiHandle<debug::Script>(script), start, end); |
| 1930 } |
| 1931 } |
| 1932 shared->set_debug_is_blackboxed(is_blackboxed); |
| 1933 shared->set_computed_debug_is_blackboxed(true); |
| 1934 } |
| 1935 return shared->debug_is_blackboxed(); |
| 1936 } |
| 1937 |
1894 void Debug::OnAsyncTaskEvent(debug::PromiseDebugActionType type, int id) { | 1938 void Debug::OnAsyncTaskEvent(debug::PromiseDebugActionType type, int id) { |
1895 if (in_debug_scope() || ignore_events()) return; | 1939 if (in_debug_scope() || ignore_events()) return; |
1896 | 1940 |
1897 if (debug_event_listener_) { | 1941 if (debug_delegate_) { |
1898 debug_event_listener_->PromiseEventOccurred(type, id); | 1942 debug_delegate_->PromiseEventOccurred(type, id); |
1899 if (!non_inspector_listener_exists()) return; | 1943 if (!non_inspector_listener_exists()) return; |
1900 } | 1944 } |
1901 | 1945 |
1902 HandleScope scope(isolate_); | 1946 HandleScope scope(isolate_); |
1903 DebugScope debug_scope(this); | 1947 DebugScope debug_scope(this); |
1904 if (debug_scope.failed()) return; | 1948 if (debug_scope.failed()) return; |
1905 | 1949 |
1906 // Create the script collected state object. | 1950 // Create the script collected state object. |
1907 Handle<Object> event_data; | 1951 Handle<Object> event_data; |
1908 // Bail out and don't call debugger if exception. | 1952 // Bail out and don't call debugger if exception. |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1960 void Debug::ProcessCompileEvent(v8::DebugEvent event, Handle<Script> script) { | 2004 void Debug::ProcessCompileEvent(v8::DebugEvent event, Handle<Script> script) { |
1961 if (ignore_events()) return; | 2005 if (ignore_events()) return; |
1962 if (script->type() != i::Script::TYPE_NORMAL && | 2006 if (script->type() != i::Script::TYPE_NORMAL && |
1963 script->type() != i::Script::TYPE_WASM) { | 2007 script->type() != i::Script::TYPE_WASM) { |
1964 return; | 2008 return; |
1965 } | 2009 } |
1966 SuppressDebug while_processing(this); | 2010 SuppressDebug while_processing(this); |
1967 DebugScope debug_scope(this); | 2011 DebugScope debug_scope(this); |
1968 if (debug_scope.failed()) return; | 2012 if (debug_scope.failed()) return; |
1969 | 2013 |
1970 if (debug_event_listener_) { | 2014 if (debug_delegate_) { |
1971 debug_event_listener_->ScriptCompiled(ToApiHandle<debug::Script>(script), | 2015 debug_delegate_->ScriptCompiled(ToApiHandle<debug::Script>(script), |
1972 event != v8::AfterCompile); | 2016 event != v8::AfterCompile); |
1973 if (!non_inspector_listener_exists()) return; | 2017 if (!non_inspector_listener_exists()) return; |
1974 } | 2018 } |
1975 | 2019 |
1976 HandleScope scope(isolate_); | 2020 HandleScope scope(isolate_); |
1977 // Create the compile state object. | 2021 // Create the compile state object. |
1978 Handle<Object> event_data; | 2022 Handle<Object> event_data; |
1979 // Bail out and don't call debugger if exception. | 2023 // Bail out and don't call debugger if exception. |
1980 if (!MakeCompileEvent(script, event).ToHandle(&event_data)) return; | 2024 if (!MakeCompileEvent(script, event).ToHandle(&event_data)) return; |
1981 | 2025 |
1982 // Process debug event. | 2026 // Process debug event. |
(...skipping 23 matching lines...) Expand all Loading... |
2006 // Set new entry. | 2050 // Set new entry. |
2007 if (!callback->IsNullOrUndefined(isolate_)) { | 2051 if (!callback->IsNullOrUndefined(isolate_)) { |
2008 event_listener_ = global_handles->Create(*callback); | 2052 event_listener_ = global_handles->Create(*callback); |
2009 if (data.is_null()) data = isolate_->factory()->undefined_value(); | 2053 if (data.is_null()) data = isolate_->factory()->undefined_value(); |
2010 event_listener_data_ = global_handles->Create(*data); | 2054 event_listener_data_ = global_handles->Create(*data); |
2011 } | 2055 } |
2012 | 2056 |
2013 UpdateState(); | 2057 UpdateState(); |
2014 } | 2058 } |
2015 | 2059 |
2016 | 2060 void Debug::SetDebugDelegate(debug::DebugDelegate* delegate) { |
2017 void Debug::SetDebugEventListener(debug::DebugEventListener* listener) { | 2061 debug_delegate_ = delegate; |
2018 debug_event_listener_ = listener; | |
2019 UpdateState(); | 2062 UpdateState(); |
2020 } | 2063 } |
2021 | 2064 |
2022 void Debug::UpdateState() { | 2065 void Debug::UpdateState() { |
2023 bool is_active = | 2066 bool is_active = !event_listener_.is_null() || debug_delegate_ != nullptr; |
2024 !event_listener_.is_null() || debug_event_listener_ != nullptr; | |
2025 if (is_active || in_debug_scope()) { | 2067 if (is_active || in_debug_scope()) { |
2026 // Note that the debug context could have already been loaded to | 2068 // Note that the debug context could have already been loaded to |
2027 // bootstrap test cases. | 2069 // bootstrap test cases. |
2028 isolate_->compilation_cache()->Disable(); | 2070 isolate_->compilation_cache()->Disable(); |
2029 is_active = Load(); | 2071 is_active = Load(); |
2030 } else if (is_loaded()) { | 2072 } else if (is_loaded()) { |
2031 isolate_->compilation_cache()->Enable(); | 2073 isolate_->compilation_cache()->Enable(); |
2032 Unload(); | 2074 Unload(); |
2033 } | 2075 } |
2034 is_active_ = is_active; | 2076 is_active_ = is_active; |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2071 | 2113 |
2072 StackLimitCheck check(isolate_); | 2114 StackLimitCheck check(isolate_); |
2073 if (check.HasOverflowed()) return; | 2115 if (check.HasOverflowed()) return; |
2074 | 2116 |
2075 { JavaScriptFrameIterator it(isolate_); | 2117 { JavaScriptFrameIterator it(isolate_); |
2076 DCHECK(!it.done()); | 2118 DCHECK(!it.done()); |
2077 Object* fun = it.frame()->function(); | 2119 Object* fun = it.frame()->function(); |
2078 if (fun && fun->IsJSFunction()) { | 2120 if (fun && fun->IsJSFunction()) { |
2079 // Don't stop in builtin functions. | 2121 // Don't stop in builtin functions. |
2080 if (!JSFunction::cast(fun)->shared()->IsSubjectToDebugging()) return; | 2122 if (!JSFunction::cast(fun)->shared()->IsSubjectToDebugging()) return; |
| 2123 if (isolate_->stack_guard()->CheckDebugBreak() && |
| 2124 IsBlackboxed(JSFunction::cast(fun)->shared())) { |
| 2125 Deoptimizer::DeoptimizeFunction(JSFunction::cast(fun)); |
| 2126 return; |
| 2127 } |
2081 JSGlobalObject* global = | 2128 JSGlobalObject* global = |
2082 JSFunction::cast(fun)->context()->global_object(); | 2129 JSFunction::cast(fun)->context()->global_object(); |
2083 // Don't stop in debugger functions. | 2130 // Don't stop in debugger functions. |
2084 if (IsDebugGlobal(global)) return; | 2131 if (IsDebugGlobal(global)) return; |
2085 // Don't stop if the break location is muted. | 2132 // Don't stop if the break location is muted. |
2086 if (IsMutedAtCurrentLocation(it.frame())) return; | 2133 if (IsMutedAtCurrentLocation(it.frame())) return; |
2087 } | 2134 } |
2088 } | 2135 } |
2089 | 2136 |
2090 isolate_->stack_guard()->ClearDebugBreak(); | 2137 isolate_->stack_guard()->ClearDebugBreak(); |
(...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2268 return v8::Utils::ToLocal(callback_data_); | 2315 return v8::Utils::ToLocal(callback_data_); |
2269 } | 2316 } |
2270 | 2317 |
2271 | 2318 |
2272 v8::Isolate* EventDetailsImpl::GetIsolate() const { | 2319 v8::Isolate* EventDetailsImpl::GetIsolate() const { |
2273 return reinterpret_cast<v8::Isolate*>(exec_state_->GetIsolate()); | 2320 return reinterpret_cast<v8::Isolate*>(exec_state_->GetIsolate()); |
2274 } | 2321 } |
2275 | 2322 |
2276 } // namespace internal | 2323 } // namespace internal |
2277 } // namespace v8 | 2324 } // namespace v8 |
OLD | NEW |