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

Side by Side Diff: src/debug.h

Issue 8139027: Version 3.6.5 (Closed) Base URL: http://v8.googlecode.com/svn/trunk/
Patch Set: '' Created 9 years, 2 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 | Annotate | Revision Log
« no previous file with comments | « src/d8-debug.cc ('k') | src/debug.cc » ('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 2011 the V8 project authors. All rights reserved. 1 // Copyright 2011 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 851 matching lines...) Expand 10 before | Expand all | Expand 10 after
862 DISALLOW_COPY_AND_ASSIGN(Debugger); 862 DISALLOW_COPY_AND_ASSIGN(Debugger);
863 }; 863 };
864 864
865 865
866 // This class is used for entering the debugger. Create an instance in the stack 866 // This class is used for entering the debugger. Create an instance in the stack
867 // to enter the debugger. This will set the current break state, make sure the 867 // to enter the debugger. This will set the current break state, make sure the
868 // debugger is loaded and switch to the debugger context. If the debugger for 868 // debugger is loaded and switch to the debugger context. If the debugger for
869 // some reason could not be entered FailedToEnter will return true. 869 // some reason could not be entered FailedToEnter will return true.
870 class EnterDebugger BASE_EMBEDDED { 870 class EnterDebugger BASE_EMBEDDED {
871 public: 871 public:
872 EnterDebugger() 872 EnterDebugger();
873 : isolate_(Isolate::Current()), 873 ~EnterDebugger();
874 prev_(isolate_->debug()->debugger_entry()),
875 it_(isolate_),
876 has_js_frames_(!it_.done()),
877 save_(isolate_) {
878 Debug* debug = isolate_->debug();
879 ASSERT(prev_ != NULL || !debug->is_interrupt_pending(PREEMPT));
880 ASSERT(prev_ != NULL || !debug->is_interrupt_pending(DEBUGBREAK));
881
882 // Link recursive debugger entry.
883 debug->set_debugger_entry(this);
884
885 // Store the previous break id and frame id.
886 break_id_ = debug->break_id();
887 break_frame_id_ = debug->break_frame_id();
888
889 // Create the new break info. If there is no JavaScript frames there is no
890 // break frame id.
891 if (has_js_frames_) {
892 debug->NewBreak(it_.frame()->id());
893 } else {
894 debug->NewBreak(StackFrame::NO_ID);
895 }
896
897 // Make sure that debugger is loaded and enter the debugger context.
898 load_failed_ = !debug->Load();
899 if (!load_failed_) {
900 // NOTE the member variable save which saves the previous context before
901 // this change.
902 isolate_->set_context(*debug->debug_context());
903 }
904 }
905
906 ~EnterDebugger() {
907 ASSERT(Isolate::Current() == isolate_);
908 Debug* debug = isolate_->debug();
909
910 // Restore to the previous break state.
911 debug->SetBreak(break_frame_id_, break_id_);
912
913 // Check for leaving the debugger.
914 if (prev_ == NULL) {
915 // Clear mirror cache when leaving the debugger. Skip this if there is a
916 // pending exception as clearing the mirror cache calls back into
917 // JavaScript. This can happen if the v8::Debug::Call is used in which
918 // case the exception should end up in the calling code.
919 if (!isolate_->has_pending_exception()) {
920 // Try to avoid any pending debug break breaking in the clear mirror
921 // cache JavaScript code.
922 if (isolate_->stack_guard()->IsDebugBreak()) {
923 debug->set_interrupts_pending(DEBUGBREAK);
924 isolate_->stack_guard()->Continue(DEBUGBREAK);
925 }
926 debug->ClearMirrorCache();
927 }
928
929 // Request preemption and debug break when leaving the last debugger entry
930 // if any of these where recorded while debugging.
931 if (debug->is_interrupt_pending(PREEMPT)) {
932 // This re-scheduling of preemption is to avoid starvation in some
933 // debugging scenarios.
934 debug->clear_interrupt_pending(PREEMPT);
935 isolate_->stack_guard()->Preempt();
936 }
937 if (debug->is_interrupt_pending(DEBUGBREAK)) {
938 debug->clear_interrupt_pending(DEBUGBREAK);
939 isolate_->stack_guard()->DebugBreak();
940 }
941
942 // If there are commands in the queue when leaving the debugger request
943 // that these commands are processed.
944 if (isolate_->debugger()->HasCommands()) {
945 isolate_->stack_guard()->DebugCommand();
946 }
947
948 // If leaving the debugger with the debugger no longer active unload it.
949 if (!isolate_->debugger()->IsDebuggerActive()) {
950 isolate_->debugger()->UnloadDebugger();
951 }
952 }
953
954 // Leaving this debugger entry.
955 debug->set_debugger_entry(prev_);
956 }
957 874
958 // Check whether the debugger could be entered. 875 // Check whether the debugger could be entered.
959 inline bool FailedToEnter() { return load_failed_; } 876 inline bool FailedToEnter() { return load_failed_; }
960 877
961 // Check whether there are any JavaScript frames on the stack. 878 // Check whether there are any JavaScript frames on the stack.
962 inline bool HasJavaScriptFrames() { return has_js_frames_; } 879 inline bool HasJavaScriptFrames() { return has_js_frames_; }
963 880
964 // Get the active context from before entering the debugger. 881 // Get the active context from before entering the debugger.
965 inline Handle<Context> GetContext() { return save_.context(); } 882 inline Handle<Context> GetContext() { return save_.context(); }
966 883
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
1056 973
1057 DISALLOW_COPY_AND_ASSIGN(MessageDispatchHelperThread); 974 DISALLOW_COPY_AND_ASSIGN(MessageDispatchHelperThread);
1058 }; 975 };
1059 976
1060 977
1061 } } // namespace v8::internal 978 } } // namespace v8::internal
1062 979
1063 #endif // ENABLE_DEBUGGER_SUPPORT 980 #endif // ENABLE_DEBUGGER_SUPPORT
1064 981
1065 #endif // V8_DEBUG_H_ 982 #endif // V8_DEBUG_H_
OLDNEW
« no previous file with comments | « src/d8-debug.cc ('k') | src/debug.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698