forked from qt-creator/qt-creator
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:
@@ -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) {
|
||||||
|
if (!startServers(QHostAddress::LocalHost))
|
||||||
return false;
|
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
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user