forked from qt-creator/qt-creator
Valgrind: Make the (threaded) parser a proper member of the runner
Simplifies user code, and it was only ever used in a 1:1 relation, even in the tests. Change-Id: I3ce4fc83a361aceb730c05420efdb4ea52d37cda Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
@@ -55,9 +55,9 @@ MemcheckToolRunner::MemcheckToolRunner(RunControl *runControl, bool withGdb)
|
||||
: ValgrindToolRunner(runControl), m_withGdb(withGdb)
|
||||
{
|
||||
setDisplayName("MemcheckToolRunner");
|
||||
connect(&m_parser, &XmlProtocol::ThreadedParser::error,
|
||||
connect(m_runner.parser(), &XmlProtocol::ThreadedParser::error,
|
||||
this, &MemcheckToolRunner::parserError);
|
||||
connect(&m_parser, &XmlProtocol::ThreadedParser::suppressionCount,
|
||||
connect(m_runner.parser(), &XmlProtocol::ThreadedParser::suppressionCount,
|
||||
this, &MemcheckToolRunner::suppressionCount);
|
||||
|
||||
if (withGdb) {
|
||||
@@ -67,7 +67,7 @@ MemcheckToolRunner::MemcheckToolRunner(RunControl *runControl, bool withGdb)
|
||||
this, &MemcheckToolRunner::appendLog);
|
||||
m_runner.disableXml();
|
||||
} else {
|
||||
connect(&m_parser, &XmlProtocol::ThreadedParser::internalError,
|
||||
connect(m_runner.parser(), &XmlProtocol::ThreadedParser::internalError,
|
||||
this, &MemcheckToolRunner::internalParserError);
|
||||
}
|
||||
}
|
||||
@@ -86,8 +86,6 @@ void MemcheckToolRunner::start()
|
||||
{
|
||||
// MemcheckTool::engineStarting(this);
|
||||
|
||||
m_runner.setParser(&m_parser);
|
||||
|
||||
appendMessage(tr("Analyzing memory of %1").arg(executable()) + QLatin1Char('\n'),
|
||||
Utils::NormalMessageFormat);
|
||||
ValgrindToolRunner::start();
|
||||
@@ -95,7 +93,7 @@ void MemcheckToolRunner::start()
|
||||
|
||||
void MemcheckToolRunner::stop()
|
||||
{
|
||||
disconnect(&m_parser, &ThreadedParser::internalError,
|
||||
disconnect(m_runner.parser(), &ThreadedParser::internalError,
|
||||
this, &MemcheckToolRunner::internalParserError);
|
||||
ValgrindToolRunner::stop();
|
||||
}
|
||||
|
||||
@@ -60,7 +60,6 @@ private:
|
||||
void startDebugger();
|
||||
void appendLog(const QByteArray &data);
|
||||
|
||||
XmlProtocol::ThreadedParser m_parser;
|
||||
ValgrindRunner m_runner;
|
||||
const bool m_withGdb;
|
||||
};
|
||||
|
||||
@@ -455,10 +455,8 @@ void ValgrindMemcheckParserTest::testValgrindGarbage()
|
||||
|
||||
void ValgrindMemcheckParserTest::testParserStop()
|
||||
{
|
||||
ThreadedParser parser;
|
||||
ValgrindRunner runner;
|
||||
runner.setValgrindExecutable(fakeValgrindExecutable());
|
||||
runner.setParser(&parser);
|
||||
runner.setValgrindArguments({"-i", dataFile("memcheck-output-sample1.xml"), "--wait", "5" });
|
||||
runner.setProcessChannelMode(QProcess::ForwardedChannels);
|
||||
|
||||
@@ -477,7 +475,6 @@ void ValgrindMemcheckParserTest::testRealValgrind()
|
||||
QSKIP("This test needs valgrind in PATH");
|
||||
QString executable = QProcessEnvironment::systemEnvironment().value("VALGRIND_TEST_BIN", fakeValgrindExecutable());
|
||||
qDebug() << "running exe:" << executable << " HINT: set VALGRIND_TEST_BIN to change this";
|
||||
ThreadedParser parser;
|
||||
|
||||
ProjectExplorer::StandardRunnable debuggee;
|
||||
debuggee.executable = executable;
|
||||
@@ -487,8 +484,7 @@ void ValgrindMemcheckParserTest::testRealValgrind()
|
||||
runner.setDebuggee(debuggee);
|
||||
runner.setDevice(ProjectExplorer::DeviceManager::instance()->defaultDevice(
|
||||
ProjectExplorer::Constants::DESKTOP_DEVICE_TYPE));
|
||||
runner.setParser(&parser);
|
||||
RunnerDumper dumper(&runner, &parser);
|
||||
RunnerDumper dumper(&runner);
|
||||
runner.start();
|
||||
runner.waitForFinished();
|
||||
}
|
||||
@@ -517,21 +513,18 @@ void ValgrindMemcheckParserTest::testValgrindStartError()
|
||||
QFETCH(QString, debuggee);
|
||||
QFETCH(QString, debuggeeArgs);
|
||||
|
||||
ThreadedParser parser;
|
||||
|
||||
ProjectExplorer::StandardRunnable debuggeeExecutable;
|
||||
debuggeeExecutable.executable = debuggee;
|
||||
debuggeeExecutable.environment = Utils::Environment::systemEnvironment();
|
||||
debuggeeExecutable.commandLineArguments = debuggeeArgs;
|
||||
|
||||
ValgrindRunner runner;
|
||||
runner.setParser(&parser);
|
||||
runner.setValgrindExecutable(valgrindExe);
|
||||
runner.setValgrindArguments(valgrindArgs);
|
||||
runner.setDebuggee(debuggeeExecutable);
|
||||
runner.setDevice(ProjectExplorer::DeviceManager::instance()->defaultDevice(
|
||||
ProjectExplorer::Constants::DESKTOP_DEVICE_TYPE));
|
||||
RunnerDumper dumper(&runner, &parser);
|
||||
RunnerDumper dumper(&runner);
|
||||
runner.start();
|
||||
runner.waitForFinished();
|
||||
QVERIFY(dumper.m_errorReceived);
|
||||
|
||||
@@ -53,14 +53,13 @@ class Recorder : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit Recorder(Valgrind::XmlProtocol::Parser *parser, QObject *parent = 0)
|
||||
: QObject(parent)
|
||||
explicit Recorder(XmlProtocol::Parser *parser)
|
||||
{
|
||||
connect(parser, &Valgrind::XmlProtocol::Parser::error,
|
||||
connect(parser, &XmlProtocol::Parser::error,
|
||||
this, &Recorder::error);
|
||||
connect(parser, &Valgrind::XmlProtocol::Parser::errorCount,
|
||||
connect(parser, &XmlProtocol::Parser::errorCount,
|
||||
this, &Recorder::errorCount);
|
||||
connect(parser, &Valgrind::XmlProtocol::Parser::suppressionCount,
|
||||
connect(parser, &XmlProtocol::Parser::suppressionCount,
|
||||
this, &Recorder::suppressionCount);
|
||||
}
|
||||
|
||||
@@ -91,13 +90,13 @@ class RunnerDumper : public QObject
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit RunnerDumper(ValgrindRunner *runner, XmlProtocol::ThreadedParser *parser)
|
||||
explicit RunnerDumper(ValgrindRunner *runner)
|
||||
{
|
||||
connect(parser, &XmlProtocol::ThreadedParser::error,
|
||||
connect(runner->parser(), &XmlProtocol::ThreadedParser::error,
|
||||
this, &RunnerDumper::error);
|
||||
connect(parser, &XmlProtocol::ThreadedParser::internalError,
|
||||
connect(runner->parser(), &XmlProtocol::ThreadedParser::internalError,
|
||||
this, &RunnerDumper::internalError);
|
||||
connect(parser, &XmlProtocol::ThreadedParser::status,
|
||||
connect(runner->parser(), &XmlProtocol::ThreadedParser::status,
|
||||
this, &RunnerDumper::status);
|
||||
connect(runner, &ValgrindRunner::logMessageReceived,
|
||||
this, &RunnerDumper::logMessageReceived);
|
||||
|
||||
@@ -59,7 +59,7 @@ public:
|
||||
QString tool;
|
||||
|
||||
QTcpServer xmlServer;
|
||||
XmlProtocol::ThreadedParser *parser = nullptr;
|
||||
XmlProtocol::ThreadedParser parser;
|
||||
QTcpServer logServer;
|
||||
QTcpSocket *logSocket = nullptr;
|
||||
bool disableXml = false;
|
||||
@@ -77,7 +77,7 @@ ValgrindRunner::~ValgrindRunner()
|
||||
// make sure we don't delete the thread while it's still running
|
||||
waitForFinished();
|
||||
}
|
||||
if (d->parser->isRunning()) {
|
||||
if (d->parser.isRunning()) {
|
||||
// make sure we don't delete the thread while it's still running
|
||||
waitForFinished();
|
||||
}
|
||||
@@ -238,10 +238,9 @@ ValgrindProcess *ValgrindRunner::valgrindProcess() const
|
||||
return d->process;
|
||||
}
|
||||
|
||||
void ValgrindRunner::setParser(XmlProtocol::ThreadedParser *parser)
|
||||
XmlProtocol::ThreadedParser *ValgrindRunner::parser() const
|
||||
{
|
||||
QTC_ASSERT(!d->parser, qt_noop());
|
||||
d->parser = parser;
|
||||
return &d->parser;
|
||||
}
|
||||
|
||||
|
||||
@@ -257,7 +256,7 @@ void ValgrindRunner::xmlSocketConnected()
|
||||
QTcpSocket *socket = d->xmlServer.nextPendingConnection();
|
||||
QTC_ASSERT(socket, return);
|
||||
d->xmlServer.close();
|
||||
d->parser->parse(socket);
|
||||
d->parser.parse(socket);
|
||||
}
|
||||
|
||||
void ValgrindRunner::logSocketConnected()
|
||||
|
||||
@@ -70,7 +70,7 @@ public:
|
||||
|
||||
ValgrindProcess *valgrindProcess() const;
|
||||
|
||||
void setParser(XmlProtocol::ThreadedParser *parser);
|
||||
XmlProtocol::ThreadedParser *parser() const;
|
||||
void disableXml();
|
||||
|
||||
signals:
|
||||
|
||||
@@ -112,9 +112,6 @@ void ValgrindTestRunnerTest::cleanup()
|
||||
Q_ASSERT(m_runner);
|
||||
delete m_runner;
|
||||
m_runner = 0;
|
||||
Q_ASSERT(m_parser);
|
||||
delete m_parser;
|
||||
m_parser = 0;
|
||||
|
||||
m_logMessages.clear();
|
||||
m_errors.clear();
|
||||
@@ -137,14 +134,10 @@ void ValgrindTestRunnerTest::init()
|
||||
this, &ValgrindTestRunnerTest::logMessageReceived);
|
||||
connect(m_runner, &ValgrindRunner::processErrorReceived,
|
||||
this, &ValgrindTestRunnerTest::internalError);
|
||||
Q_ASSERT(!m_parser);
|
||||
m_parser = new ThreadedParser;
|
||||
connect(m_parser, &ThreadedParser::internalError,
|
||||
connect(m_runner->parser(), &ThreadedParser::internalError,
|
||||
this, &ValgrindTestRunnerTest::internalError);
|
||||
connect(m_parser, &ThreadedParser::error,
|
||||
connect(m_runner->parser(), &ThreadedParser::error,
|
||||
this, &ValgrindTestRunnerTest::error);
|
||||
|
||||
m_runner->setParser(m_parser);
|
||||
}
|
||||
|
||||
//BEGIN: Actual test cases
|
||||
@@ -735,7 +728,6 @@ void ValgrindTestRunnerTest::testInvalidjump()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void ValgrindTestRunnerTest::testOverlap()
|
||||
{
|
||||
const QString app("overlap");
|
||||
|
||||
@@ -33,7 +33,6 @@
|
||||
|
||||
namespace Valgrind {
|
||||
|
||||
namespace XmlProtocol { class ThreadedParser; }
|
||||
class ValgrindRunner;
|
||||
|
||||
namespace Test {
|
||||
@@ -72,7 +71,6 @@ private slots:
|
||||
private:
|
||||
QString runTestBinary(const QString &binary, const QStringList &vArgs = QStringList());
|
||||
|
||||
XmlProtocol::ThreadedParser *m_parser = nullptr;
|
||||
ValgrindRunner *m_runner = nullptr;
|
||||
QList<QByteArray> m_logMessages;
|
||||
QList<XmlProtocol::Error> m_errors;
|
||||
|
||||
@@ -38,33 +38,20 @@
|
||||
using namespace Valgrind;
|
||||
using namespace Valgrind::XmlProtocol;
|
||||
|
||||
static QString fakeValgrindExecutable()
|
||||
{
|
||||
return QLatin1String(VALGRIND_FAKE_PATH);
|
||||
}
|
||||
|
||||
static QString dataFile(const QLatin1String &file)
|
||||
{
|
||||
return QLatin1String(PARSERTESTS_DATA_DIR) + QLatin1String("/") + file;
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
QApplication app(argc, argv);
|
||||
qRegisterMetaType<Error>();
|
||||
|
||||
ThreadedParser parser;
|
||||
|
||||
ValgrindRunner runner;
|
||||
runner.setValgrindExecutable(fakeValgrindExecutable());
|
||||
runner.setValgrindArguments(QStringList() << QLatin1String("-i") << dataFile(QLatin1String("memcheck-output-sample1.xml")) );
|
||||
runner.setParser(&parser);
|
||||
runner.setValgrindExecutable(VALGRIND_FAKE_PATH);
|
||||
runner.setValgrindArguments({"-i", PARSERTESTS_DATA_DIR "/memcheck-output-sample1.xml"});
|
||||
|
||||
ModelDemo demo(&runner);
|
||||
QObject::connect(&runner, &ValgrindRunner::finished,
|
||||
&demo, &ModelDemo::finished);
|
||||
ErrorListModel model;
|
||||
QObject::connect(&parser, &ThreadedParser::error,
|
||||
QObject::connect(runner.parser(), &ThreadedParser::error,
|
||||
&model, &ErrorListModel::addError,
|
||||
Qt::QueuedConnection);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user