Fix valgrind with remote Linux hosts.

This reverts commit f1ccad12dc and adds the necessary code to make both
the local and the remote case work.

Task-number: QTCREATORBUG-16153
Change-Id: I233ec9d7b31ca6e076515dd03ae7400758ee0c34
Reviewed-by: hjk <hjk@theqtcompany.com>
This commit is contained in:
Christian Kandeler
2016-04-26 14:59:23 +02:00
parent b688d18de4
commit a14e7db1a4
6 changed files with 28 additions and 8 deletions

View File

@@ -95,10 +95,11 @@ bool MemcheckRunner::start()
{ {
QTC_ASSERT(d->parser, return false); QTC_ASSERT(d->parser, return false);
if (!startServers()) if (device()->type() == ProjectExplorer::Constants::DESKTOP_DEVICE_TYPE) {
return false; if (!startServers(QHostAddress::LocalHost))
return false;
setValgrindArguments(memcheckLogArguments() + valgrindArguments()); setValgrindArguments(memcheckLogArguments() + valgrindArguments());
}
return ValgrindRunner::start(); return ValgrindRunner::start();
} }
@@ -133,10 +134,8 @@ void MemcheckRunner::readLogSocket()
emit logMessageReceived(d->logSocket->readAll()); emit logMessageReceived(d->logSocket->readAll());
} }
bool MemcheckRunner::startServers() bool MemcheckRunner::startServers(const QHostAddress &localHostAddress)
{ {
QHostAddress localHostAddress(QHostAddress::LocalHost);
bool check = d->xmlServer.listen(localHostAddress); bool check = d->xmlServer.listen(localHostAddress);
const QString ip = localHostAddress.toString(); const QString ip = localHostAddress.toString();
if (!check) { if (!check) {
@@ -172,5 +171,13 @@ QStringList MemcheckRunner::memcheckLogArguments() const
return arguments; return arguments;
} }
void MemcheckRunner::localHostAddressRetrieved(const QHostAddress &localHostAddress)
{
if (startServers(localHostAddress)) {
setValgrindArguments(memcheckLogArguments() + valgrindArguments());
valgrindProcess()->setValgrindArguments(fullValgrindArguments());
}
}
} // namespace Memcheck } // namespace Memcheck
} // namespace Valgrind } // namespace Valgrind

View File

@@ -53,6 +53,8 @@ signals:
void logMessageReceived(const QByteArray &); void logMessageReceived(const QByteArray &);
private slots: private slots:
void localHostAddressRetrieved(const QHostAddress &localHostAddress);
void xmlSocketConnected(); void xmlSocketConnected();
void logSocketConnected(); void logSocketConnected();
void readLogSocket(); void readLogSocket();
@@ -60,7 +62,7 @@ private slots:
private: private:
QString tool() const; QString tool() const;
bool startServers(); bool startServers(const QHostAddress &localHostAddress);
QStringList memcheckLogArguments() const; QStringList memcheckLogArguments() const;
class Private; class Private;

View File

@@ -205,6 +205,8 @@ void ValgrindProcess::connected()
{ {
QTC_ASSERT(m_remote.m_connection->state() == QSsh::SshConnection::Connected, return); QTC_ASSERT(m_remote.m_connection->state() == QSsh::SshConnection::Connected, return);
emit localHostAddressRetrieved(m_remote.m_connection->connectionInfo().localAddress);
// connected, run command // connected, run command
QString cmd; QString cmd;

View File

@@ -75,6 +75,7 @@ signals:
void finished(int, QProcess::ExitStatus); void finished(int, QProcess::ExitStatus);
void error(QProcess::ProcessError); void error(QProcess::ProcessError);
void processOutput(const QString &, Utils::OutputFormat format); void processOutput(const QString &, Utils::OutputFormat format);
void localHostAddressRetrieved(const QHostAddress &localHostAddress);
private: private:
void handleRemoteStderr(); void handleRemoteStderr();

View File

@@ -147,6 +147,8 @@ bool ValgrindRunner::start()
this, &ValgrindRunner::processFinished); this, &ValgrindRunner::processFinished);
QObject::connect(d->process, &ValgrindProcess::error, QObject::connect(d->process, &ValgrindProcess::error,
this, &ValgrindRunner::processError); this, &ValgrindRunner::processError);
QObject::connect(d->process, &ValgrindProcess::localHostAddressRetrieved,
this, &ValgrindRunner::localHostAddressRetrieved);
d->process->run(d->debuggee.runMode); d->process->run(d->debuggee.runMode);
return true; return true;
@@ -178,6 +180,11 @@ void ValgrindRunner::processFinished(int ret, QProcess::ExitStatus status)
emit processErrorReceived(errorString(), d->process->processError()); emit processErrorReceived(errorString(), d->process->processError());
} }
void ValgrindRunner::localHostAddressRetrieved(const QHostAddress &localHostAddress)
{
Q_UNUSED(localHostAddress);
}
QString ValgrindRunner::errorString() const QString ValgrindRunner::errorString() const
{ {
if (d->process) if (d->process)

View File

@@ -80,6 +80,7 @@ signals:
protected slots: protected slots:
virtual void processError(QProcess::ProcessError); virtual void processError(QProcess::ProcessError);
virtual void processFinished(int, QProcess::ExitStatus); virtual void processFinished(int, QProcess::ExitStatus);
virtual void localHostAddressRetrieved(const QHostAddress &localHostAddress);
private: private:
class Private; class Private;