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