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>
This commit is contained in:
parent
0e6f1cb7fa
commit
1af802a9a6
@ -109,6 +109,36 @@ QT_BEGIN_NAMESPACE
|
|||||||
using QtMiscUtils::toHexUpper;
|
using QtMiscUtils::toHexUpper;
|
||||||
using QtMiscUtils::fromHex;
|
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()
|
static void stackTrace()
|
||||||
{
|
{
|
||||||
@ -116,6 +146,10 @@ static void stackTrace()
|
|||||||
const int disableStackDump = qEnvironmentVariableIntValue("QTEST_DISABLE_STACK_DUMP", &ok);
|
const int disableStackDump = qEnvironmentVariableIntValue("QTEST_DISABLE_STACK_DUMP", &ok);
|
||||||
if (ok && disableStackDump == 1)
|
if (ok && disableStackDump == 1)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
if (debuggerPresent())
|
||||||
|
return;
|
||||||
|
|
||||||
#ifdef Q_OS_LINUX
|
#ifdef Q_OS_LINUX
|
||||||
fprintf(stderr, "\n========= Received signal, dumping stack ==============\n");
|
fprintf(stderr, "\n========= Received signal, dumping stack ==============\n");
|
||||||
char cmd[512];
|
char cmd[512];
|
||||||
@ -1249,37 +1283,6 @@ char *toPrettyUnicode(const ushort *p, int length)
|
|||||||
return buffer.take();
|
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
|
void TestMethods::invokeTests(QObject *testObject) const
|
||||||
{
|
{
|
||||||
const QMetaObject *metaObject = testObject->metaObject();
|
const QMetaObject *metaObject = testObject->metaObject();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user