Valgrind: Add toolargs to command, not to a string list

Removes arg splitting/re-combination roundtrips.

Change-Id: I4bc19d3b65f4c685140cea0e190191587f5124e6
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
Reviewed-by: Alessandro Portale <alessandro.portale@qt.io>
This commit is contained in:
hjk
2023-05-23 18:49:32 +02:00
parent 0d22680c7c
commit 5689f0c60e
5 changed files with 24 additions and 29 deletions

View File

@@ -61,34 +61,32 @@ CallgrindToolRunner::~CallgrindToolRunner()
cleanupTempFile(); cleanupTempFile();
} }
QStringList CallgrindToolRunner::toolArguments() const void CallgrindToolRunner::addToolArguments(CommandLine &cmd) const
{ {
QStringList arguments = {"--tool=callgrind"}; cmd << "--tool=callgrind";
if (m_settings.enableCacheSim()) if (m_settings.enableCacheSim())
arguments << "--cache-sim=yes"; cmd << "--cache-sim=yes";
if (m_settings.enableBranchSim()) if (m_settings.enableBranchSim())
arguments << "--branch-sim=yes"; cmd << "--branch-sim=yes";
if (m_settings.collectBusEvents()) if (m_settings.collectBusEvents())
arguments << "--collect-bus=yes"; cmd << "--collect-bus=yes";
if (m_settings.collectSystime()) if (m_settings.collectSystime())
arguments << "--collect-systime=yes"; cmd << "--collect-systime=yes";
if (m_markAsPaused) if (m_markAsPaused)
arguments << "--instr-atstart=no"; cmd << "--instr-atstart=no";
// add extra arguments // add extra arguments
if (!m_argumentForToggleCollect.isEmpty()) if (!m_argumentForToggleCollect.isEmpty())
arguments << m_argumentForToggleCollect; cmd << m_argumentForToggleCollect;
arguments << "--callgrind-out-file=" + m_valgrindOutputFile.path(); cmd << "--callgrind-out-file=" + m_valgrindOutputFile.path();
arguments << ProcessArgs::splitArgs(m_settings.callgrindArguments(), HostOsInfo::hostOs()); cmd.addArgs(m_settings.callgrindArguments(), CommandLine::Raw);
return arguments;
} }
QString CallgrindToolRunner::progressTitle() const QString CallgrindToolRunner::progressTitle() const

View File

@@ -48,7 +48,7 @@ public:
Q_ENUM(Option) Q_ENUM(Option)
protected: protected:
QStringList toolArguments() const override; void addToolArguments(Utils::CommandLine &cmd) const override;
QString progressTitle() const override; QString progressTitle() const override;
signals: signals:

View File

@@ -111,7 +111,7 @@ signals:
private: private:
QString progressTitle() const override; QString progressTitle() const override;
QStringList toolArguments() const override; void addToolArguments(CommandLine &cmd) const override;
void startDebugger(qint64 valgrindPid); void startDebugger(qint64 valgrindPid);
void appendLog(const QByteArray &data); void appendLog(const QByteArray &data);
@@ -181,15 +181,15 @@ void MemcheckToolRunner::stop()
ValgrindToolRunner::stop(); ValgrindToolRunner::stop();
} }
QStringList MemcheckToolRunner::toolArguments() const void MemcheckToolRunner::addToolArguments(CommandLine &cmd) const
{ {
QStringList arguments = {"--tool=memcheck", "--gen-suppressions=all"}; cmd << "--tool=memcheck" << "--gen-suppressions=all";
if (m_settings.trackOrigins()) if (m_settings.trackOrigins())
arguments << "--track-origins=yes"; cmd << "--track-origins=yes";
if (m_settings.showReachable()) if (m_settings.showReachable())
arguments << "--show-reachable=yes"; cmd << "--show-reachable=yes";
QString leakCheckValue; QString leakCheckValue;
switch (m_settings.leakCheckOnFinish()) { switch (m_settings.leakCheckOnFinish()) {
@@ -204,19 +204,17 @@ QStringList MemcheckToolRunner::toolArguments() const
leakCheckValue = "summary"; leakCheckValue = "summary";
break; break;
} }
arguments << "--leak-check=" + leakCheckValue; cmd << "--leak-check=" + leakCheckValue;
for (const FilePath &file : m_settings.suppressions()) for (const FilePath &file : m_settings.suppressions())
arguments << QString("--suppressions=%1").arg(file.path()); cmd << QString("--suppressions=%1").arg(file.path());
arguments << QString("--num-callers=%1").arg(m_settings.numCallers()); cmd << QString("--num-callers=%1").arg(m_settings.numCallers());
if (m_withGdb) if (m_withGdb)
arguments << "--vgdb=yes" << "--vgdb-error=0"; cmd << "--vgdb=yes" << "--vgdb-error=0";
arguments << ProcessArgs::splitArgs(m_settings.memcheckArguments(), HostOsInfo::hostOs()); cmd.addArgs(m_settings.memcheckArguments(), CommandLine::Raw);
return arguments;
} }
const FilePaths MemcheckToolRunner::suppressionFiles() const const FilePaths MemcheckToolRunner::suppressionFiles() const

View File

@@ -74,9 +74,9 @@ void ValgrindToolRunner::start()
m_progress.reportStarted(); m_progress.reportStarted();
CommandLine valgrind{valgrindExecutable}; CommandLine valgrind{valgrindExecutable};
valgrind.addArgs(m_settings.valgrindArguments.value(), CommandLine::Raw); valgrind.addArgs(m_settings.valgrindArguments(), CommandLine::Raw);
valgrind.addArgs(genericToolArguments()); valgrind.addArgs(genericToolArguments());
valgrind.addArgs(toolArguments()); addToolArguments(valgrind);
m_runner.setValgrindCommand(valgrind); m_runner.setValgrindCommand(valgrind);
m_runner.setDebuggee(runControl()->runnable()); m_runner.setDebuggee(runControl()->runnable());

View File

@@ -6,7 +6,6 @@
#include "valgrindsettings.h" #include "valgrindsettings.h"
#include <projectexplorer/runcontrol.h> #include <projectexplorer/runcontrol.h>
#include <utils/environment.h>
#include <valgrind/valgrindrunner.h> #include <valgrind/valgrindrunner.h>
#include <QFutureInterface> #include <QFutureInterface>
@@ -23,7 +22,7 @@ public:
protected: protected:
virtual QString progressTitle() const = 0; virtual QString progressTitle() const = 0;
virtual QStringList toolArguments() const = 0; virtual void addToolArguments(Utils::CommandLine &cmd) const = 0;
ValgrindProjectSettings m_settings; ValgrindProjectSettings m_settings;
QFutureInterface<void> m_progress; QFutureInterface<void> m_progress;