diff options
author | hjk <hjk@qt.io> | 2019-06-04 12:10:11 +0200 |
---|---|---|
committer | hjk <hjk@qt.io> | 2019-06-04 13:37:01 +0000 |
commit | da6f4901f0b0a417979fa123ae9bc5c1ed43fc2a (patch) | |
tree | 623f10e0cc0beaf2b557d29dec8bad2024a5e20f /src/plugins/valgrind/valgrindrunner.cpp | |
parent | cce76afcff377873e46611dc3f00bd3909e0ca21 (diff) |
Valgrind: Shuffle code
The original idea was to make that use Utils::FilePath, but it looks
like the code is not ready for that yet.
Change-Id: Ib5466257049675fcbf19abd115ba58a78b45e484
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
Diffstat (limited to 'src/plugins/valgrind/valgrindrunner.cpp')
-rw-r--r-- | src/plugins/valgrind/valgrindrunner.cpp | 82 |
1 files changed, 41 insertions, 41 deletions
diff --git a/src/plugins/valgrind/valgrindrunner.cpp b/src/plugins/valgrind/valgrindrunner.cpp index 587c2cb7d8..f99a4847a0 100644 --- a/src/plugins/valgrind/valgrindrunner.cpp +++ b/src/plugins/valgrind/valgrindrunner.cpp @@ -46,7 +46,7 @@ class ValgrindRunner::Private : public QObject public: Private(ValgrindRunner *owner) : q(owner) {} - void run(); + bool run(); void handleRemoteStderr(const QString &b); void handleRemoteStdout(const QString &b); @@ -80,8 +80,44 @@ public: bool disableXml = false; }; -void ValgrindRunner::Private::run() +bool ValgrindRunner::Private::run() { + if (!localServerAddress.isNull()) { + if (!q->startServers()) + return false; + + bool enableXml = !disableXml; + + QStringList arguments = {"--child-silent-after-fork=yes"}; + + auto handleSocketParameter = [&enableXml, &arguments](const QString &prefix, const QTcpServer &tcpServer) + { + QHostAddress serverAddress = tcpServer.serverAddress(); + if (serverAddress.protocol() != QAbstractSocket::IPv4Protocol) { + // Report will end up in the Application Output pane, i.e. not have + // clickable items, but that's better than nothing. + qWarning("Need IPv4 for valgrind"); + enableXml = false; + } else { + arguments << QString("%1=%2:%3").arg(prefix).arg(serverAddress.toString()) + .arg(tcpServer.serverPort()); + } + }; + + handleSocketParameter("--xml-socket", xmlServer); + handleSocketParameter("--log-socket", logServer); + + if (enableXml) + arguments << "--xml=yes"; + + // FIXME: Unclear why this changes the stored data. + m_valgrindArguments = arguments + m_valgrindArguments; + } + + m_valgrindProcess.setProcessChannelMode(channelMode); + // consider appending our options last so they override any interfering user-supplied options + // -q as suggested by valgrind manual + connect(&m_valgrindProcess, &ApplicationLauncher::processExited, this, &ValgrindRunner::Private::closed); connect(&m_valgrindProcess, &ApplicationLauncher::processStarted, @@ -120,6 +156,8 @@ void ValgrindRunner::Private::run() m_valgrindProcess.start(valgrind); else m_valgrindProcess.start(valgrind, m_device); + + return true; } void ValgrindRunner::Private::handleRemoteStderr(const QString &b) @@ -272,47 +310,9 @@ void ValgrindRunner::waitForFinished() const loop.exec(); } -static void handleSocketParameter(const QString &prefix, const QTcpServer &tcpServer, - bool *useXml, QStringList *arguments) -{ - QHostAddress serverAddress = tcpServer.serverAddress(); - if (serverAddress.protocol() != QAbstractSocket::IPv4Protocol) { - // Report will end up in the Application Output pane, i.e. not have - // clickable items, but that's better than nothing. - qWarning("Need IPv4 for valgrind"); - *useXml = false; - } else { - *arguments << QString("%1=%2:%3").arg(prefix).arg(serverAddress.toString()) - .arg(tcpServer.serverPort()); - } -} - bool ValgrindRunner::start() { - if (!d->localServerAddress.isNull()) { - if (!startServers()) - return false; - - bool enableXml = !d->disableXml; - - QStringList arguments = {"--child-silent-after-fork=yes"}; - - handleSocketParameter("--xml-socket", d->xmlServer, &enableXml, &arguments); - handleSocketParameter("--log-socket", d->logServer, &enableXml, &arguments); - - if (enableXml) - arguments << "--xml=yes"; - - d->m_valgrindArguments = arguments + d->m_valgrindArguments; - } - - d->m_valgrindProcess.setProcessChannelMode(d->channelMode); - // consider appending our options last so they override any interfering user-supplied options - // -q as suggested by valgrind manual - d->m_valgrindExecutable = d->m_valgrindExecutable; - d->run(); - - return true; + return d->run(); } void ValgrindRunner::processError(QProcess::ProcessError e) |