| 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 #ifndef V8_DEBUG_H_ | 5 #ifndef V8_DEBUG_H_ |
| 6 #define V8_DEBUG_H_ | 6 #define V8_DEBUG_H_ |
| 7 | 7 |
| 8 #include "allocation.h" | 8 #include "allocation.h" |
| 9 #include "arguments.h" | 9 #include "arguments.h" |
| 10 #include "assembler.h" | 10 #include "assembler.h" |
| (...skipping 804 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 815 | 815 |
| 816 void CallMessageDispatchHandler(); | 816 void CallMessageDispatchHandler(); |
| 817 | 817 |
| 818 Handle<Context> GetDebugContext(); | 818 Handle<Context> GetDebugContext(); |
| 819 | 819 |
| 820 // Unload the debugger if possible. Only called when no debugger is currently | 820 // Unload the debugger if possible. Only called when no debugger is currently |
| 821 // active. | 821 // active. |
| 822 void UnloadDebugger(); | 822 void UnloadDebugger(); |
| 823 friend void ForceUnloadDebugger(); // In test-debug.cc | 823 friend void ForceUnloadDebugger(); // In test-debug.cc |
| 824 | 824 |
| 825 inline bool EventActive(v8::DebugEvent event) { | 825 inline bool EventActive() { |
| 826 LockGuard<RecursiveMutex> lock_guard(debugger_access_); | 826 LockGuard<RecursiveMutex> lock_guard(&debugger_access_); |
| 827 | 827 |
| 828 // Check whether the message handler was been cleared. | 828 // Check whether the message handler was been cleared. |
| 829 // TODO(yangguo): handle loading and unloading of the debugger differently. |
| 829 if (debugger_unload_pending_) { | 830 if (debugger_unload_pending_) { |
| 830 if (isolate_->debug()->debugger_entry() == NULL) { | 831 if (isolate_->debug()->debugger_entry() == NULL) { |
| 831 UnloadDebugger(); | 832 UnloadDebugger(); |
| 832 } | 833 } |
| 833 } | 834 } |
| 834 | 835 |
| 835 if (((event == v8::BeforeCompile) || (event == v8::AfterCompile)) && | |
| 836 !FLAG_debug_compile_events) { | |
| 837 return false; | |
| 838 | |
| 839 } else if ((event == v8::ScriptCollected) && | |
| 840 !FLAG_debug_script_collected_events) { | |
| 841 return false; | |
| 842 } | |
| 843 | |
| 844 // Currently argument event is not used. | 836 // Currently argument event is not used. |
| 845 return !compiling_natives_ && Debugger::IsDebuggerActive(); | 837 return !ignore_debugger_ && is_active_; |
| 846 } | 838 } |
| 847 | 839 |
| 848 void set_compiling_natives(bool compiling_natives) { | 840 bool ignore_debugger() const { return ignore_debugger_; } |
| 849 compiling_natives_ = compiling_natives; | |
| 850 } | |
| 851 bool compiling_natives() const { return compiling_natives_; } | |
| 852 void set_loading_debugger(bool v) { is_loading_debugger_ = v; } | |
| 853 bool is_loading_debugger() const { return is_loading_debugger_; } | |
| 854 void set_live_edit_enabled(bool v) { live_edit_enabled_ = v; } | 841 void set_live_edit_enabled(bool v) { live_edit_enabled_ = v; } |
| 855 bool live_edit_enabled() const { | 842 bool live_edit_enabled() const { |
| 856 return FLAG_enable_liveedit && live_edit_enabled_ ; | 843 return FLAG_enable_liveedit && live_edit_enabled_ ; |
| 857 } | 844 } |
| 858 void set_force_debugger_active(bool force_debugger_active) { | 845 |
| 859 force_debugger_active_ = force_debugger_active; | 846 bool is_active() { |
| 847 LockGuard<RecursiveMutex> lock_guard(&debugger_access_); |
| 848 return is_active_; |
| 860 } | 849 } |
| 861 bool force_debugger_active() const { return force_debugger_active_; } | |
| 862 | 850 |
| 863 bool IsDebuggerActive(); | 851 class IgnoreScope { |
| 852 public: |
| 853 explicit IgnoreScope(Debugger* debugger) |
| 854 : debugger_(debugger), |
| 855 old_state_(debugger_->ignore_debugger_) { |
| 856 debugger_->ignore_debugger_ = true; |
| 857 } |
| 858 |
| 859 ~IgnoreScope() { |
| 860 debugger_->ignore_debugger_ = old_state_; |
| 861 } |
| 862 |
| 863 private: |
| 864 Debugger* debugger_; |
| 865 bool old_state_; |
| 866 DISALLOW_COPY_AND_ASSIGN(IgnoreScope); |
| 867 }; |
| 864 | 868 |
| 865 private: | 869 private: |
| 866 explicit Debugger(Isolate* isolate); | 870 explicit Debugger(Isolate* isolate); |
| 867 | 871 |
| 868 void CallEventCallback(v8::DebugEvent event, | 872 void CallEventCallback(v8::DebugEvent event, |
| 869 Handle<Object> exec_state, | 873 Handle<Object> exec_state, |
| 870 Handle<Object> event_data, | 874 Handle<Object> event_data, |
| 871 v8::Debug::ClientData* client_data); | 875 v8::Debug::ClientData* client_data); |
| 872 void CallCEventCallback(v8::DebugEvent event, | 876 void CallCEventCallback(v8::DebugEvent event, |
| 873 Handle<Object> exec_state, | 877 Handle<Object> exec_state, |
| 874 Handle<Object> event_data, | 878 Handle<Object> event_data, |
| 875 v8::Debug::ClientData* client_data); | 879 v8::Debug::ClientData* client_data); |
| 876 void CallJSEventCallback(v8::DebugEvent event, | 880 void CallJSEventCallback(v8::DebugEvent event, |
| 877 Handle<Object> exec_state, | 881 Handle<Object> exec_state, |
| 878 Handle<Object> event_data); | 882 Handle<Object> event_data); |
| 879 void ListenersChanged(); | 883 void ListenersChanged(); |
| 880 | 884 |
| 881 RecursiveMutex* debugger_access_; // Mutex guarding debugger variables. | 885 RecursiveMutex debugger_access_; // Mutex guarding debugger variables. |
| 882 Handle<Object> event_listener_; // Global handle to listener. | 886 Handle<Object> event_listener_; // Global handle to listener. |
| 883 Handle<Object> event_listener_data_; | 887 Handle<Object> event_listener_data_; |
| 884 bool compiling_natives_; // Are we compiling natives? | 888 bool is_active_; |
| 885 bool is_loading_debugger_; // Are we loading the debugger? | 889 bool ignore_debugger_; // Are we temporarily ignoring the debugger? |
| 886 bool live_edit_enabled_; // Enable LiveEdit. | 890 bool live_edit_enabled_; // Enable LiveEdit. |
| 887 bool never_unload_debugger_; // Can we unload the debugger? | 891 bool never_unload_debugger_; // Can we unload the debugger? |
| 888 bool force_debugger_active_; // Activate debugger without event listeners. | |
| 889 v8::Debug::MessageHandler2 message_handler_; | 892 v8::Debug::MessageHandler2 message_handler_; |
| 890 bool debugger_unload_pending_; // Was message handler cleared? | 893 bool debugger_unload_pending_; // Was message handler cleared? |
| 891 | 894 |
| 892 Mutex dispatch_handler_access_; // Mutex guarding dispatch handler. | 895 Mutex dispatch_handler_access_; // Mutex guarding dispatch handler. |
| 893 v8::Debug::DebugMessageDispatchHandler debug_message_dispatch_handler_; | 896 v8::Debug::DebugMessageDispatchHandler debug_message_dispatch_handler_; |
| 894 MessageDispatchHelperThread* message_dispatch_helper_thread_; | 897 MessageDispatchHelperThread* message_dispatch_helper_thread_; |
| 895 | 898 |
| 896 DebuggerAgent* agent_; | 899 DebuggerAgent* agent_; |
| 897 | 900 |
| 898 static const int kQueueInitialSize = 4; | 901 static const int kQueueInitialSize = 4; |
| (...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1010 Mutex mutex_; | 1013 Mutex mutex_; |
| 1011 bool already_signalled_; | 1014 bool already_signalled_; |
| 1012 | 1015 |
| 1013 DISALLOW_COPY_AND_ASSIGN(MessageDispatchHelperThread); | 1016 DISALLOW_COPY_AND_ASSIGN(MessageDispatchHelperThread); |
| 1014 }; | 1017 }; |
| 1015 | 1018 |
| 1016 | 1019 |
| 1017 } } // namespace v8::internal | 1020 } } // namespace v8::internal |
| 1018 | 1021 |
| 1019 #endif // V8_DEBUG_H_ | 1022 #endif // V8_DEBUG_H_ |
| OLD | NEW |