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

Unified Diff: src/debug/debug.h

Issue 2622863003: [debugger] infrastructure for side-effect-free debug-evaluate. (Closed)
Patch Set: fix mips one more time Created 3 years, 11 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/debug/arm64/debug-arm64.cc ('k') | src/debug/debug.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/debug/debug.h
diff --git a/src/debug/debug.h b/src/debug/debug.h
index 4f32857c8a0d948aa91a921440a53c120670e9b9..6eb8b58623f71a63d67678f2952fa9d52829064b 100644
--- a/src/debug/debug.h
+++ b/src/debug/debug.h
@@ -514,6 +514,9 @@ class Debug {
return is_active() && !debug_context().is_null() && break_id() != 0;
}
+ bool PerformSideEffectCheck(Handle<JSFunction> function);
+ bool PerformSideEffectCheckForCallback(Address function);
+
// Flags and states.
DebugScope* debugger_entry() {
return reinterpret_cast<DebugScope*>(
@@ -547,6 +550,10 @@ class Debug {
return reinterpret_cast<Address>(&is_active_);
}
+ Address hook_on_function_call_address() {
+ return reinterpret_cast<Address>(&hook_on_function_call_);
+ }
+
Address after_break_target_address() {
return reinterpret_cast<Address>(&after_break_target_);
}
@@ -567,6 +574,7 @@ class Debug {
explicit Debug(Isolate* isolate);
void UpdateState();
+ void UpdateHookOnFunctionCall();
void Unload();
void SetNextBreakId() {
thread_local_.break_id_ = ++thread_local_.break_count_;
@@ -662,16 +670,30 @@ class Debug {
base::Semaphore command_received_; // Signaled for each command received.
LockingCommandMessageQueue command_queue_;
+ // Debugger is active, i.e. there is a debug event listener attached.
bool is_active_;
+ // Debugger needs to be notified on every new function call.
+ // Used for stepping and read-only checks
+ bool hook_on_function_call_;
+ // Suppress debug events.
bool is_suppressed_;
+ // LiveEdit is enabled.
bool live_edit_enabled_;
+ // Do not trigger debug break events.
bool break_disabled_;
+ // Do not break on break points.
bool break_points_active_;
+ // Nested inside a debug event listener.
bool in_debug_event_listener_;
+ // Trigger debug break events for all exceptions.
bool break_on_exception_;
+ // Trigger debug break events for uncaught exceptions.
bool break_on_uncaught_exception_;
+ // Termination exception because side effect check has failed.
+ bool side_effect_check_failed_;
- DebugInfoListNode* debug_info_list_; // List of active debug info objects.
+ // List of active debug info objects.
+ DebugInfoListNode* debug_info_list_;
// Storage location for jump when exiting debug break calls.
// Note that this address is not GC safe. It should be computed immediately
@@ -731,6 +753,7 @@ class Debug {
friend class DisableBreak;
friend class LiveEdit;
friend class SuppressDebug;
+ friend class NoSideEffectScope;
friend Handle<FixedArray> GetDebuggedFunctions(); // In test-debug.cc
friend void CheckDebuggerUnloaded(bool check_functions); // In test-debug.cc
@@ -804,6 +827,23 @@ class SuppressDebug BASE_EMBEDDED {
DISALLOW_COPY_AND_ASSIGN(SuppressDebug);
};
+class NoSideEffectScope {
+ public:
+ NoSideEffectScope(Isolate* isolate, bool disallow_side_effects)
+ : isolate_(isolate),
+ old_needs_side_effect_check_(isolate->needs_side_effect_check()) {
+ isolate->set_needs_side_effect_check(old_needs_side_effect_check_ ||
+ disallow_side_effects);
+ isolate->debug()->UpdateHookOnFunctionCall();
+ isolate->debug()->side_effect_check_failed_ = false;
+ }
+ ~NoSideEffectScope();
+
+ private:
+ Isolate* isolate_;
+ bool old_needs_side_effect_check_;
+ DISALLOW_COPY_AND_ASSIGN(NoSideEffectScope);
+};
// Code generator routines.
class DebugCodegen : public AllStatic {
« no previous file with comments | « src/debug/arm64/debug-arm64.cc ('k') | src/debug/debug.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698