Revision: 3500
Author: [email protected]
Date: Fri Dec 18 12:30:29 2009
Log: Reapply "wait for connection" feature implementation

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();

-- 
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev

Reply via email to