From f6656c88c4beefb963798afbd6a40d59a6164952 Mon Sep 17 00:00:00 2001 From: Mathias Stearn Date: Fri, 6 Mar 2015 15:22:24 -0500 Subject: Fix launchGDBServer() compile and make more signal safe --- src/mongo/util/debugger.cpp | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) (limited to 'src/mongo/util/debugger.cpp') diff --git a/src/mongo/util/debugger.cpp b/src/mongo/util/debugger.cpp index 03f8dfa7c24..13be663a955 100644 --- a/src/mongo/util/debugger.cpp +++ b/src/mongo/util/debugger.cpp @@ -31,8 +31,6 @@ #include "mongo/util/debugger.h" -#include - #include "mongo/db/server_options.h" #include "mongo/util/debug_util.h" @@ -40,10 +38,6 @@ #include #endif -#if defined(USE_GDBSERVER) -#include "mongo/db/jsobj.h" -#endif // defined(USE_GDBSERVER) - namespace mongo { void breakpoint() { #ifdef _WIN32 @@ -77,15 +71,27 @@ namespace mongo { // Don't come back here signal(SIGTRAP, SIG_IGN); - int newPort = serverGlobalParams.port + 2000; - string newPortStr = "localhost:" + BSONObjBuilder::numStr(newPort); - string pidToDebug = BSONObjBuilder::numStr(getpid()); + const int newPort = serverGlobalParams.port + 2000; + + char pidToDebug[16]; + int pidRet = snprintf(pidToDebug, sizeof(pidToDebug), "%d", getpid()); + invariant(pidRet >= 0 && size_t(pidRet) < sizeof(pidToDebug)); + + char hostPort[32]; + int hostRet = snprintf(hostPort, sizeof(hostPort), "localhost:%d", newPort); + invariant(hostRet >= 0 && size_t(hostRet) < sizeof(hostPort)); + + char msg[128]; + int msgRet = snprintf(msg, sizeof(msg), + "\n\n\t**** Launching gdbserver on %s ****\n\n", hostPort); + invariant(msgRet >= 0 && size_t(msgRet) < sizeof(msg)); + invariant(write(STDERR_FILENO, msg, msgRet) == msgRet); - cout << "\n\n\t**** Launching gdbserver on " << newPortStr << " ****" << endl << endl; if (fork() == 0) { //child - execlp("gdbserver", "gdbserver", "--attach", newPortStr.c_str(), pidToDebug.c_str(), NULL); + execlp("gdbserver", "gdbserver", "--attach", hostPort, pidToDebug, NULL); perror(NULL); + _exit(1); } else { //parent -- cgit v1.2.1