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
