Arquivos
hhvm/hphp/runtime/debugger/cmd/cmd_quit.cpp
T
Herman Venter 917fffb462 Reduce redundant spew when breaking on an unhandled exception. Quit cleanly.
Currently the debugger prints the line where an exception has been thrown, along with the type exception. Then it prints the source listing of the exception. Then it prints a serialization of the exception, which includes a full stack trace. Since the debugger has a command for printing stack traces, the latter bit information seems completely redundant when stopped in the command line client. This diff suppresses the stack trace in that case. It also suppresses redundant diagnostics that get generated during the debugger's attempt to find and print the source code in response to a list command. Finally, the quit command was too eager to let the client die after notifying the proxy, causing the proxy to get a pipe closed exception rather than the quit command, which often allowed the program to carry on running after the client has already quit. The quit command now waits for an acknowledgement from the proxy before shutting down.
2013-06-06 11:07:59 -07:00

64 linhas
2.4 KiB
C++

/*
+----------------------------------------------------------------------+
| HipHop for PHP |
+----------------------------------------------------------------------+
| Copyright (c) 2010-2013 Facebook, Inc. (http://www.facebook.com) |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
| available through the world-wide-web at the following url: |
| http://www.php.net/license/3_01.txt |
| If you did not receive a copy of the PHP license and are unable to |
| obtain it through the world-wide-web, please send a note to |
| license@php.net so we can mail you a copy immediately. |
+----------------------------------------------------------------------+
*/
#include "hphp/runtime/debugger/cmd/cmd_quit.h"
namespace HPHP { namespace Eval {
///////////////////////////////////////////////////////////////////////////////
TRACE_SET_MOD(debugger);
// The text to display when the debugger client processes "help quit".
void CmdQuit::help(DebuggerClient &client) {
TRACE(2, "CmdQuit::help\n");
client.helpTitle("Quit Command");
client.helpCmds(
"[q]uit", "quits this program",
nullptr
);
client.helpBody(
"After you type this command, you will not see me anymore."
);
}
// Carries out the Quit command by informing the server the client
// is going away and then getting the client to quit.
void CmdQuit::onClientImpl(DebuggerClient &client) {
TRACE(2, "CmdQuit::onClientImpl\n");
if (DebuggerCommand::displayedHelp(client)) return;
if (client.argCount() == 0) {
client.xend<CmdQuit>(this); // Wait for server ack before closing pipe.
client.quit();
} else {
help(client);
}
}
// Sends an acknowledgment back to the client so that
// it can go ahead and terminate. It it were to do so
// before the server has received the command, the pipe
// will be closed and the proxy will carry on as if there
// were a communication failure, which is not as clean
// explicitly quitting.
bool CmdQuit::onServer(DebuggerProxy &proxy) {
TRACE(2, "CmdQuit::onServer\n");
return proxy.sendToClient(this);
}
///////////////////////////////////////////////////////////////////////////////
}}