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.cc

Issue 42173: Added automatic debug break for processing debugger commands (Closed) Base URL: http://v8.googlecode.com/svn/branches/bleeding_edge/
Patch Set: Created 11 years, 9 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.h ('k') | src/execution.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/debug.cc
===================================================================
--- src/debug.cc (revision 1507)
+++ src/debug.cc (working copy)
@@ -688,7 +688,7 @@
ClearStepping();
// Notify the debug event listeners.
- Debugger::OnDebugBreak(break_points_hit);
+ Debugger::OnDebugBreak(break_points_hit, false);
} else if (thread_local_.last_step_action_ != StepNone) {
// Hold on to last step action as it is cleared by the call to
// ClearStepping.
@@ -1508,12 +1508,13 @@
}
// Process debug event
- ProcessDebugEvent(v8::Exception, event_data);
+ ProcessDebugEvent(v8::Exception, event_data, false);
// Return to continue execution from where the exception was thrown.
}
-void Debugger::OnDebugBreak(Handle<Object> break_points_hit) {
+void Debugger::OnDebugBreak(Handle<Object> break_points_hit,
+ bool auto_continue) {
HandleScope scope;
// Debugger has already been entered by caller.
@@ -1539,7 +1540,7 @@
}
// Process debug event
- ProcessDebugEvent(v8::Break, event_data);
+ ProcessDebugEvent(v8::Break, event_data, auto_continue);
}
@@ -1564,7 +1565,7 @@
}
// Process debug event
- ProcessDebugEvent(v8::BeforeCompile, event_data);
+ ProcessDebugEvent(v8::BeforeCompile, event_data, false);
}
@@ -1625,7 +1626,7 @@
return;
}
// Process debug event
- ProcessDebugEvent(v8::AfterCompile, event_data);
+ ProcessDebugEvent(v8::AfterCompile, event_data, false);
}
@@ -1650,12 +1651,13 @@
return;
}
// Process debug event.
- ProcessDebugEvent(v8::NewFunction, event_data);
+ ProcessDebugEvent(v8::NewFunction, event_data, false);
}
void Debugger::ProcessDebugEvent(v8::DebugEvent event,
- Handle<Object> event_data) {
+ Handle<Object> event_data,
+ bool auto_continue) {
HandleScope scope;
// Create the execution state.
@@ -1666,7 +1668,7 @@
}
// First notify the builtin debugger.
if (message_thread_ != NULL) {
- message_thread_->DebugEvent(event, exec_state, event_data);
+ message_thread_->DebugEvent(event, exec_state, event_data, auto_continue);
}
// Notify registered debug event listener. This can be either a C or a
// JavaScript function.
@@ -1773,6 +1775,15 @@
}
+bool Debugger::HasCommands() {
+ if (message_thread_ != NULL) {
+ return message_thread_->HasCommands();
+ } else {
+ return false;
+ }
+}
+
+
void Debugger::ProcessHostDispatch(void* dispatch) {
if (message_thread_ != NULL) {
message_thread_->ProcessHostDispatch(dispatch);
@@ -1904,7 +1915,8 @@
// the VM.
void DebugMessageThread::DebugEvent(v8::DebugEvent event,
Handle<Object> exec_state,
- Handle<Object> event_data) {
+ Handle<Object> event_data,
+ bool auto_continue) {
HandleScope scope;
if (!Debug::Load()) return;
@@ -1947,18 +1959,27 @@
}
// Notify the debugger that a debug event has occurred.
- bool success = SetEventJSONFromEvent(event_data);
- if (!success) {
- // If failed to notify debugger just continue running.
- return;
+ if (!auto_continue) {
+ bool success = SetEventJSONFromEvent(event_data);
+ if (!success) {
+ // If failed to notify debugger just continue running.
+ return;
+ }
}
- // Wait for requests from the debugger.
+ // Process requests from the debugger.
host_running_ = false;
while (true) {
+ // Wait for new command in the queue.
command_received_->Wait();
+
+ // The debug command interrupt flag might have been set when the command was
+ // added.
+ StackGuard::Continue(DEBUGCOMMAND);
+
+ // Get the command from the queue.
+ Vector<uint16_t> command = command_queue_.Get();
Logger::DebugTag("Got request from command queue, in interactive loop.");
- Vector<uint16_t> command = command_queue_.Get();
ASSERT(!host_running_);
if (!Debugger::debugger_active()) {
host_running_ = true;
@@ -2031,7 +2052,7 @@
SendMessage(str);
// Return from debug event processing is VM should be running.
- if (running) {
+ if (running || (auto_continue && !HasCommands())) {
return;
}
}
@@ -2049,6 +2070,10 @@
Logger::DebugTag("Put command on command_queue.");
command_queue_.Put(command_copy);
command_received_->Signal();
+
+ if (!Debug::InDebugger()) {
+ StackGuard::DebugCommand();
+ }
}
« no previous file with comments | « src/debug.h ('k') | src/execution.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698