diff options
author | Erik Verbruggen <erik.verbruggen@theqtcompany.com> | 2016-05-12 13:28:05 +0200 |
---|---|---|
committer | Erik Verbruggen <erik.verbruggen@qt.io> | 2016-05-24 10:23:21 +0000 |
commit | 1af802a9a62f7237800db17419e57c6f848ed00d (patch) | |
tree | eac2a6c6cd7749959256a2059df50c200eb78440 /src/testlib | |
parent | 0e6f1cb7fa634195cb238c4893e6fa0b99fb0abb (diff) |
QTest: do not generate stack traces when a debugger is attached.
Just leave it to the attached debugger to do it.
Change-Id: I65f2676cccec2a074ea31cb8739e1b3fb626a5da
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
Diffstat (limited to 'src/testlib')
-rw-r--r-- | src/testlib/qtestcase.cpp | 65 |
1 files changed, 34 insertions, 31 deletions
diff --git a/src/testlib/qtestcase.cpp b/src/testlib/qtestcase.cpp index bf44049a0e..73303ca28d 100644 --- a/src/testlib/qtestcase.cpp +++ b/src/testlib/qtestcase.cpp @@ -109,6 +109,36 @@ QT_BEGIN_NAMESPACE using QtMiscUtils::toHexUpper; using QtMiscUtils::fromHex; +static bool debuggerPresent() +{ +#if defined(Q_OS_LINUX) + int fd = open("/proc/self/status", O_RDONLY); + if (fd == -1) + return false; + char buffer[2048]; + ssize_t size = read(fd, buffer, sizeof(buffer)); + if (size == -1) { + close(fd); + return false; + } + buffer[size] = 0; + const char tracerPidToken[] = "\nTracerPid:"; + char *tracerPid = strstr(buffer, tracerPidToken); + if (!tracerPid) { + close(fd); + return false; + } + tracerPid += sizeof(tracerPidToken); + long int pid = strtol(tracerPid, &tracerPid, 10); + close(fd); + return pid != 0; +#elif defined(Q_OS_WIN) + return IsDebuggerPresent(); +#else + // TODO + return false; +#endif +} static void stackTrace() { @@ -116,6 +146,10 @@ static void stackTrace() const int disableStackDump = qEnvironmentVariableIntValue("QTEST_DISABLE_STACK_DUMP", &ok); if (ok && disableStackDump == 1) return; + + if (debuggerPresent()) + return; + #ifdef Q_OS_LINUX fprintf(stderr, "\n========= Received signal, dumping stack ==============\n"); char cmd[512]; @@ -1249,37 +1283,6 @@ char *toPrettyUnicode(const ushort *p, int length) return buffer.take(); } -static bool debuggerPresent() -{ -#if defined(Q_OS_LINUX) - int fd = open("/proc/self/status", O_RDONLY); - if (fd == -1) - return false; - char buffer[2048]; - ssize_t size = read(fd, buffer, sizeof(buffer)); - if (size == -1) { - close(fd); - return false; - } - buffer[size] = 0; - const char tracerPidToken[] = "\nTracerPid:"; - char *tracerPid = strstr(buffer, tracerPidToken); - if (!tracerPid) { - close(fd); - return false; - } - tracerPid += sizeof(tracerPidToken); - long int pid = strtol(tracerPid, &tracerPid, 10); - close(fd); - return pid != 0; -#elif defined(Q_OS_WIN) - return IsDebuggerPresent(); -#else - // TODO - return false; -#endif -} - void TestMethods::invokeTests(QObject *testObject) const { const QMetaObject *metaObject = testObject->metaObject(); |