OLD | NEW |
1 // Copyright 2006-2008 the V8 project authors. All rights reserved. | 1 // Copyright 2006-2008 the V8 project authors. All rights reserved. |
2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
4 // met: | 4 // met: |
5 // | 5 // |
6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
(...skipping 831 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
842 // Flood the function with break points. | 842 // Flood the function with break points. |
843 BreakLocationIterator it(GetDebugInfo(shared), ALL_BREAK_LOCATIONS); | 843 BreakLocationIterator it(GetDebugInfo(shared), ALL_BREAK_LOCATIONS); |
844 while (!it.Done()) { | 844 while (!it.Done()) { |
845 it.SetOneShot(); | 845 it.SetOneShot(); |
846 it.Next(); | 846 it.Next(); |
847 } | 847 } |
848 } | 848 } |
849 | 849 |
850 | 850 |
851 void Debug::FloodHandlerWithOneShot() { | 851 void Debug::FloodHandlerWithOneShot() { |
| 852 // Iterate through the JavaScript stack looking for handlers. |
852 StackFrame::Id id = Top::break_frame_id(); | 853 StackFrame::Id id = Top::break_frame_id(); |
| 854 if (id == StackFrame::NO_ID) { |
| 855 // If there is no JavaScript stack don't do anything. |
| 856 return; |
| 857 } |
853 for (JavaScriptFrameIterator it(id); !it.done(); it.Advance()) { | 858 for (JavaScriptFrameIterator it(id); !it.done(); it.Advance()) { |
854 JavaScriptFrame* frame = it.frame(); | 859 JavaScriptFrame* frame = it.frame(); |
855 if (frame->HasHandler()) { | 860 if (frame->HasHandler()) { |
856 Handle<SharedFunctionInfo> shared = | 861 Handle<SharedFunctionInfo> shared = |
857 Handle<SharedFunctionInfo>( | 862 Handle<SharedFunctionInfo>( |
858 JSFunction::cast(frame->function())->shared()); | 863 JSFunction::cast(frame->function())->shared()); |
859 // Flood the function with the catch block with break points | 864 // Flood the function with the catch block with break points |
860 FloodWithOneShot(shared); | 865 FloodWithOneShot(shared); |
861 return; | 866 return; |
862 } | 867 } |
(...skipping 16 matching lines...) Expand all Loading... |
879 | 884 |
880 // Remember this step action and count. | 885 // Remember this step action and count. |
881 thread_local_.last_step_action_ = step_action; | 886 thread_local_.last_step_action_ = step_action; |
882 thread_local_.step_count_ = step_count; | 887 thread_local_.step_count_ = step_count; |
883 | 888 |
884 // Get the frame where the execution has stopped and skip the debug frame if | 889 // Get the frame where the execution has stopped and skip the debug frame if |
885 // any. The debug frame will only be present if execution was stopped due to | 890 // any. The debug frame will only be present if execution was stopped due to |
886 // hitting a break point. In other situations (e.g. unhandled exception) the | 891 // hitting a break point. In other situations (e.g. unhandled exception) the |
887 // debug frame is not present. | 892 // debug frame is not present. |
888 StackFrame::Id id = Top::break_frame_id(); | 893 StackFrame::Id id = Top::break_frame_id(); |
| 894 if (id == StackFrame::NO_ID) { |
| 895 // If there is no JavaScript stack don't do anything. |
| 896 return; |
| 897 } |
889 JavaScriptFrameIterator frames_it(id); | 898 JavaScriptFrameIterator frames_it(id); |
890 JavaScriptFrame* frame = frames_it.frame(); | 899 JavaScriptFrame* frame = frames_it.frame(); |
891 | 900 |
892 // First of all ensure there is one-shot break points in the top handler | 901 // First of all ensure there is one-shot break points in the top handler |
893 // if any. | 902 // if any. |
894 FloodHandlerWithOneShot(); | 903 FloodHandlerWithOneShot(); |
895 | 904 |
896 // If the function on the top frame is unresolved perform step out. This will | 905 // If the function on the top frame is unresolved perform step out. This will |
897 // be the case when calling unknown functions and having the debugger stopped | 906 // be the case when calling unknown functions and having the debugger stopped |
898 // in an unhandled exception. | 907 // in an unhandled exception. |
(...skipping 1053 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1952 } | 1961 } |
1953 | 1962 |
1954 | 1963 |
1955 void LockingMessageQueue::Clear() { | 1964 void LockingMessageQueue::Clear() { |
1956 ScopedLock sl(lock_); | 1965 ScopedLock sl(lock_); |
1957 queue_.Clear(); | 1966 queue_.Clear(); |
1958 } | 1967 } |
1959 | 1968 |
1960 | 1969 |
1961 } } // namespace v8::internal | 1970 } } // namespace v8::internal |
OLD | NEW |