Review URL: http://codereview.chromium.org/491079
http://code.google.com/p/v8/source/detail?r=3500
Modified:
/branches/bleeding_edge/include/v8-debug.h
/branches/bleeding_edge/src/api.cc
/branches/bleeding_edge/src/debug.cc
/branches/bleeding_edge/src/debug.h
=======================================
--- /branches/bleeding_edge/include/v8-debug.h Sun Dec 13 23:51:59 2009
+++ /branches/bleeding_edge/include/v8-debug.h Fri Dec 18 12:30:29 2009
@@ -258,8 +258,11 @@
* supplied TCP/IP port for remote debugger connection.
* \param name the name of the embedding application
* \param port the TCP/IP port to listen on
+ * \param wait_for_connection whether V8 should pause on a first statement
+ * allowing remote debugger to connect before anything interesting
happened
*/
- static bool EnableAgent(const char* name, int port);
+ static bool EnableAgent(const char* name, int port,
+ bool wait_for_connection = false);
};
=======================================
--- /branches/bleeding_edge/src/api.cc Sun Dec 13 23:51:59 2009
+++ /branches/bleeding_edge/src/api.cc Fri Dec 18 12:30:29 2009
@@ -3741,8 +3741,8 @@
}
-bool Debug::EnableAgent(const char* name, int port) {
- return i::Debugger::StartAgent(name, port);
+bool Debug::EnableAgent(const char* name, int port, bool
wait_for_connection) {
+ return i::Debugger::StartAgent(name, port, wait_for_connection);
}
#endif // ENABLE_DEBUGGER_SUPPORT
=======================================
--- /branches/bleeding_edge/src/debug.cc Sun Dec 13 23:51:59 2009
+++ /branches/bleeding_edge/src/debug.cc Fri Dec 18 12:30:29 2009
@@ -2483,7 +2483,24 @@
}
-bool Debugger::StartAgent(const char* name, int port) {
+static void StubMessageHandler2(const v8::Debug::Message& message) {
+ // Simply ignore message.
+}
+
+
+bool Debugger::StartAgent(const char* name, int port,
+ bool wait_for_connection) {
+ if (wait_for_connection) {
+ // Suspend V8 if it is already running or set V8 to suspend whenever
+ // it starts.
+ // Provide stub message handler; V8 auto-continues each suspend
+ // when there is no message handler; we doesn't need it.
+ // Once become suspended, V8 will stay so indefinitely long, until
remote
+ // debugger connects and issues "continue" command.
+ Debugger::message_handler_ = StubMessageHandler2;
+ v8::Debug::DebugBreak();
+ }
+
if (Socket::Setup()) {
agent_ = new DebuggerAgent(name, port);
agent_->Start();
=======================================
--- /branches/bleeding_edge/src/debug.h Sun Dec 13 23:51:59 2009
+++ /branches/bleeding_edge/src/debug.h Fri Dec 18 12:30:29 2009
@@ -636,7 +636,8 @@
bool* pending_exception);
// Start the debugger agent listening on the provided port.
- static bool StartAgent(const char* name, int port);
+ static bool StartAgent(const char* name, int port,
+ bool wait_for_connection = false);
// Stop the debugger agent.
static void StopAgent();