forked from qt-creator/qt-creator
Valgrind: Collapse project and global settings classes
Change-Id: I41b157bb07a451851641c7a5785334bd28036f45 Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
@@ -742,7 +742,7 @@ void CallgrindToolPrivate::setupRunner(CallgrindToolRunner *toolRunner)
|
|||||||
QTC_ASSERT(m_visualization, return);
|
QTC_ASSERT(m_visualization, return);
|
||||||
|
|
||||||
// apply project settings
|
// apply project settings
|
||||||
ValgrindProjectSettings settings;
|
ValgrindSettings settings{false};
|
||||||
settings.fromMap(runControl->settingsData(ANALYZER_VALGRIND_SETTINGS));
|
settings.fromMap(runControl->settingsData(ANALYZER_VALGRIND_SETTINGS));
|
||||||
m_visualization->setMinimumInclusiveCostRatio(settings.visualizationMinimumInclusiveCostRatio() / 100.0);
|
m_visualization->setMinimumInclusiveCostRatio(settings.visualizationMinimumInclusiveCostRatio() / 100.0);
|
||||||
m_proxyModel.setMinimumInclusiveCostRatio(settings.minimumInclusiveCostRatio() / 100.0);
|
m_proxyModel.setMinimumInclusiveCostRatio(settings.minimumInclusiveCostRatio() / 100.0);
|
||||||
|
@@ -86,7 +86,7 @@ FilePath MemcheckErrorView::defaultSuppressionFile() const
|
|||||||
|
|
||||||
// slot, can (for now) be invoked either when the settings were modified *or* when the active
|
// slot, can (for now) be invoked either when the settings were modified *or* when the active
|
||||||
// settings object has changed.
|
// settings object has changed.
|
||||||
void MemcheckErrorView::settingsChanged(ValgrindBaseSettings *settings)
|
void MemcheckErrorView::settingsChanged(ValgrindSettings *settings)
|
||||||
{
|
{
|
||||||
QTC_ASSERT(settings, return);
|
QTC_ASSERT(settings, return);
|
||||||
m_settings = settings;
|
m_settings = settings;
|
||||||
|
@@ -12,7 +12,7 @@
|
|||||||
namespace Valgrind {
|
namespace Valgrind {
|
||||||
namespace Internal {
|
namespace Internal {
|
||||||
|
|
||||||
class ValgrindBaseSettings;
|
class ValgrindSettings;
|
||||||
|
|
||||||
class MemcheckErrorView : public Debugger::DetailedErrorView
|
class MemcheckErrorView : public Debugger::DetailedErrorView
|
||||||
{
|
{
|
||||||
@@ -22,8 +22,8 @@ public:
|
|||||||
|
|
||||||
void setDefaultSuppressionFile(const Utils::FilePath &suppFile);
|
void setDefaultSuppressionFile(const Utils::FilePath &suppFile);
|
||||||
Utils::FilePath defaultSuppressionFile() const;
|
Utils::FilePath defaultSuppressionFile() const;
|
||||||
ValgrindBaseSettings *settings() const { return m_settings; }
|
ValgrindSettings *settings() const { return m_settings; }
|
||||||
void settingsChanged(ValgrindBaseSettings *settings);
|
void settingsChanged(ValgrindSettings *settings);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void suppressError();
|
void suppressError();
|
||||||
@@ -31,7 +31,7 @@ private:
|
|||||||
|
|
||||||
QAction *m_suppressAction;
|
QAction *m_suppressAction;
|
||||||
Utils::FilePath m_defaultSuppFile;
|
Utils::FilePath m_defaultSuppFile;
|
||||||
ValgrindBaseSettings *m_settings = nullptr;
|
ValgrindSettings *m_settings = nullptr;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace Internal
|
} // namespace Internal
|
||||||
|
@@ -193,13 +193,13 @@ void MemcheckToolRunner::addToolArguments(CommandLine &cmd) const
|
|||||||
|
|
||||||
QString leakCheckValue;
|
QString leakCheckValue;
|
||||||
switch (m_settings.leakCheckOnFinish()) {
|
switch (m_settings.leakCheckOnFinish()) {
|
||||||
case ValgrindBaseSettings::LeakCheckOnFinishNo:
|
case ValgrindSettings::LeakCheckOnFinishNo:
|
||||||
leakCheckValue = "no";
|
leakCheckValue = "no";
|
||||||
break;
|
break;
|
||||||
case ValgrindBaseSettings::LeakCheckOnFinishYes:
|
case ValgrindSettings::LeakCheckOnFinishYes:
|
||||||
leakCheckValue = "full";
|
leakCheckValue = "full";
|
||||||
break;
|
break;
|
||||||
case ValgrindBaseSettings::LeakCheckOnFinishSummaryOnly:
|
case ValgrindSettings::LeakCheckOnFinishSummaryOnly:
|
||||||
default:
|
default:
|
||||||
leakCheckValue = "summary";
|
leakCheckValue = "summary";
|
||||||
break;
|
break;
|
||||||
@@ -420,7 +420,7 @@ private:
|
|||||||
void heobAction();
|
void heobAction();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
ValgrindBaseSettings *m_settings;
|
ValgrindSettings *m_settings;
|
||||||
QMenu *m_filterMenu = nullptr;
|
QMenu *m_filterMenu = nullptr;
|
||||||
|
|
||||||
Valgrind::XmlProtocol::ErrorListModel m_errorModel;
|
Valgrind::XmlProtocol::ErrorListModel m_errorModel;
|
||||||
@@ -941,11 +941,11 @@ void MemcheckToolPrivate::maybeActiveRunConfigurationChanged()
|
|||||||
{
|
{
|
||||||
updateRunActions();
|
updateRunActions();
|
||||||
|
|
||||||
ValgrindBaseSettings *settings = nullptr;
|
ValgrindSettings *settings = nullptr;
|
||||||
if (Project *project = ProjectManager::startupProject())
|
if (Project *project = ProjectManager::startupProject())
|
||||||
if (Target *target = project->activeTarget())
|
if (Target *target = project->activeTarget())
|
||||||
if (RunConfiguration *rc = target->activeRunConfiguration())
|
if (RunConfiguration *rc = target->activeRunConfiguration())
|
||||||
settings = rc->currentSettings<ValgrindBaseSettings>(ANALYZER_VALGRIND_SETTINGS);
|
settings = rc->currentSettings<ValgrindSettings>(ANALYZER_VALGRIND_SETTINGS);
|
||||||
|
|
||||||
if (!settings) // fallback to global settings
|
if (!settings) // fallback to global settings
|
||||||
settings = &globalSettings();
|
settings = &globalSettings();
|
||||||
@@ -962,7 +962,7 @@ void MemcheckToolPrivate::maybeActiveRunConfigurationChanged()
|
|||||||
// now make the new settings current, update and connect input widgets
|
// now make the new settings current, update and connect input widgets
|
||||||
m_settings = settings;
|
m_settings = settings;
|
||||||
QTC_ASSERT(m_settings, return);
|
QTC_ASSERT(m_settings, return);
|
||||||
connect(m_settings, &ValgrindBaseSettings::destroyed,
|
connect(m_settings, &ValgrindSettings::destroyed,
|
||||||
this, &MemcheckToolPrivate::settingsDestroyed);
|
this, &MemcheckToolPrivate::settingsDestroyed);
|
||||||
|
|
||||||
updateFromSettings();
|
updateFromSettings();
|
||||||
|
@@ -104,16 +104,16 @@ QStringList ValgrindToolRunner::genericToolArguments() const
|
|||||||
QString smcCheckValue;
|
QString smcCheckValue;
|
||||||
|
|
||||||
switch (m_settings.selfModifyingCodeDetection()) {
|
switch (m_settings.selfModifyingCodeDetection()) {
|
||||||
case ValgrindBaseSettings::DetectSmcNo:
|
case ValgrindSettings::DetectSmcNo:
|
||||||
smcCheckValue = "none";
|
smcCheckValue = "none";
|
||||||
break;
|
break;
|
||||||
case ValgrindBaseSettings::DetectSmcEverywhere:
|
case ValgrindSettings::DetectSmcEverywhere:
|
||||||
smcCheckValue = "all";
|
smcCheckValue = "all";
|
||||||
break;
|
break;
|
||||||
case ValgrindBaseSettings::DetectSmcEverywhereButFile:
|
case ValgrindSettings::DetectSmcEverywhereButFile:
|
||||||
smcCheckValue = "all-non-file";
|
smcCheckValue = "all-non-file";
|
||||||
break;
|
break;
|
||||||
case ValgrindBaseSettings::DetectSmcStackOnly:
|
case ValgrindSettings::DetectSmcStackOnly:
|
||||||
default:
|
default:
|
||||||
smcCheckValue = "stack";
|
smcCheckValue = "stack";
|
||||||
break;
|
break;
|
||||||
|
@@ -24,7 +24,7 @@ protected:
|
|||||||
virtual QString progressTitle() const = 0;
|
virtual QString progressTitle() const = 0;
|
||||||
virtual void addToolArguments(Utils::CommandLine &cmd) const = 0;
|
virtual void addToolArguments(Utils::CommandLine &cmd) const = 0;
|
||||||
|
|
||||||
ValgrindProjectSettings m_settings;
|
ValgrindSettings m_settings{false};
|
||||||
QFutureInterface<void> m_progress;
|
QFutureInterface<void> m_progress;
|
||||||
ValgrindRunner m_runner;
|
ValgrindRunner m_runner;
|
||||||
|
|
||||||
|
@@ -31,7 +31,7 @@ class ValgrindRunConfigurationAspect : public GlobalOrProjectAspect
|
|||||||
public:
|
public:
|
||||||
ValgrindRunConfigurationAspect(Target *)
|
ValgrindRunConfigurationAspect(Target *)
|
||||||
{
|
{
|
||||||
setProjectSettings(new ValgrindProjectSettings);
|
setProjectSettings(new ValgrindSettings(false));
|
||||||
setGlobalSettings(&globalSettings());
|
setGlobalSettings(&globalSettings());
|
||||||
setId(ANALYZER_VALGRIND_SETTINGS);
|
setId(ANALYZER_VALGRIND_SETTINGS);
|
||||||
setDisplayName(Tr::tr("Valgrind Settings"));
|
setDisplayName(Tr::tr("Valgrind Settings"));
|
||||||
|
@@ -182,9 +182,12 @@ void SuppressionAspect::bufferToGui()
|
|||||||
//
|
//
|
||||||
//////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
ValgrindBaseSettings::ValgrindBaseSettings(bool global)
|
ValgrindSettings::ValgrindSettings(bool global)
|
||||||
: suppressions(this, global)
|
: suppressions(this, global)
|
||||||
{
|
{
|
||||||
|
setSettingsGroup("Analyzer");
|
||||||
|
setAutoApply(false);
|
||||||
|
|
||||||
// Note that this is used twice, once for project settings in the .user files
|
// Note that this is used twice, once for project settings in the .user files
|
||||||
// and once for global settings in QtCreator.ini. This uses intentionally
|
// and once for global settings in QtCreator.ini. This uses intentionally
|
||||||
// the same key to facilitate copying using fromMap/toMap.
|
// the same key to facilitate copying using fromMap/toMap.
|
||||||
@@ -250,6 +253,12 @@ ValgrindBaseSettings::ValgrindBaseSettings(bool global)
|
|||||||
numCallers.setDefaultValue(25);
|
numCallers.setDefaultValue(25);
|
||||||
numCallers.setLabelText(Tr::tr("Backtrace frame count:"));
|
numCallers.setLabelText(Tr::tr("Backtrace frame count:"));
|
||||||
|
|
||||||
|
lastSuppressionDirectory.setSettingsKey(base + "LastSuppressionDirectory");
|
||||||
|
lastSuppressionDirectory.setVisible(global);
|
||||||
|
|
||||||
|
lastSuppressionHistory.setSettingsKey(base + "LastSuppressionHistory");
|
||||||
|
lastSuppressionHistory.setVisible(global);
|
||||||
|
|
||||||
// Callgrind
|
// Callgrind
|
||||||
|
|
||||||
kcachegrindExecutable.setSettingsKey(base + "KCachegrindExecutable");
|
kcachegrindExecutable.setSettingsKey(base + "KCachegrindExecutable");
|
||||||
@@ -320,6 +329,24 @@ ValgrindBaseSettings::ValgrindBaseSettings(bool global)
|
|||||||
defaultErrorKinds << i;
|
defaultErrorKinds << i;
|
||||||
visibleErrorKinds.setDefaultValue(defaultErrorKinds);
|
visibleErrorKinds.setDefaultValue(defaultErrorKinds);
|
||||||
|
|
||||||
|
detectCycles.setSettingsKey(base + "Callgrind.CycleDetection");
|
||||||
|
detectCycles.setDefaultValue(true);
|
||||||
|
detectCycles.setLabelText("O"); // FIXME: Create a real icon
|
||||||
|
detectCycles.setToolTip(Tr::tr("Enable cycle detection to properly handle recursive "
|
||||||
|
"or circular function calls."));
|
||||||
|
detectCycles.setVisible(global);
|
||||||
|
|
||||||
|
costFormat.setSettingsKey(base + "Callgrind.CostFormat");
|
||||||
|
costFormat.setDefaultValue(CostDelegate::FormatRelative);
|
||||||
|
costFormat.setDisplayStyle(SelectionAspect::DisplayStyle::ComboBox);
|
||||||
|
costFormat.setVisible(global);
|
||||||
|
|
||||||
|
shortenTemplates.setSettingsKey(base + "Callgrind.ShortenTemplates");
|
||||||
|
shortenTemplates.setDefaultValue(true);
|
||||||
|
shortenTemplates.setLabelText("<>"); // FIXME: Create a real icon
|
||||||
|
shortenTemplates.setToolTip(Tr::tr("Remove template parameter lists when displaying function names."));
|
||||||
|
shortenTemplates.setVisible(global);
|
||||||
|
|
||||||
setLayouter([this] {
|
setLayouter([this] {
|
||||||
using namespace Layouting;
|
using namespace Layouting;
|
||||||
|
|
||||||
@@ -367,73 +394,28 @@ ValgrindBaseSettings::ValgrindBaseSettings(bool global)
|
|||||||
};
|
};
|
||||||
// clang-format on
|
// clang-format on
|
||||||
});
|
});
|
||||||
|
|
||||||
|
if (global) {
|
||||||
|
readSettings();
|
||||||
|
} else {
|
||||||
|
// FIXME: Is this needed?
|
||||||
|
connect(this, &AspectContainer::fromMapFinished, [this] {
|
||||||
|
// FIXME: Update project page e.g. on "Restore Global", aspects
|
||||||
|
// there are 'autoapply', and Aspect::cancel() is normally part of
|
||||||
|
// the 'manual apply' machinery.
|
||||||
|
setAutoApply(false);
|
||||||
|
cancel();
|
||||||
|
setAutoApply(true);
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ValgrindSettings &globalSettings()
|
||||||
//////////////////////////////////////////////////////////////////
|
|
||||||
//
|
|
||||||
// ValgrindGlobalSettings
|
|
||||||
//
|
|
||||||
//////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
ValgrindGlobalSettings &globalSettings()
|
|
||||||
{
|
{
|
||||||
static ValgrindGlobalSettings theSettings;
|
static ValgrindSettings theSettings{true};
|
||||||
return theSettings;
|
return theSettings;
|
||||||
}
|
}
|
||||||
|
|
||||||
ValgrindGlobalSettings::ValgrindGlobalSettings()
|
|
||||||
: ValgrindBaseSettings(true)
|
|
||||||
{
|
|
||||||
const QString base = "Analyzer.Valgrind";
|
|
||||||
|
|
||||||
lastSuppressionDirectory.setSettingsKey(base + "LastSuppressionDirectory");
|
|
||||||
|
|
||||||
lastSuppressionHistory.setSettingsKey(base + "LastSuppressionHistory");
|
|
||||||
|
|
||||||
detectCycles.setSettingsKey(base + "Callgrind.CycleDetection");
|
|
||||||
detectCycles.setDefaultValue(true);
|
|
||||||
detectCycles.setLabelText("O"); // FIXME: Create a real icon
|
|
||||||
detectCycles.setToolTip(Tr::tr("Enable cycle detection to properly handle recursive "
|
|
||||||
"or circular function calls."));
|
|
||||||
|
|
||||||
costFormat.setSettingsKey(base + "Callgrind.CostFormat");
|
|
||||||
costFormat.setDefaultValue(CostDelegate::FormatRelative);
|
|
||||||
costFormat.setDisplayStyle(SelectionAspect::DisplayStyle::ComboBox);
|
|
||||||
|
|
||||||
shortenTemplates.setSettingsKey(base + "Callgrind.ShortenTemplates");
|
|
||||||
shortenTemplates.setDefaultValue(true);
|
|
||||||
shortenTemplates.setLabelText("<>"); // FIXME: Create a real icon
|
|
||||||
shortenTemplates.setToolTip(Tr::tr("Remove template parameter lists when displaying function names."));
|
|
||||||
|
|
||||||
setSettingsGroup("Analyzer");
|
|
||||||
readSettings();
|
|
||||||
setAutoApply(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// Memcheck
|
|
||||||
//
|
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////
|
|
||||||
//
|
|
||||||
// ValgrindProjectSettings
|
|
||||||
//
|
|
||||||
//////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
ValgrindProjectSettings::ValgrindProjectSettings()
|
|
||||||
: ValgrindBaseSettings(false)
|
|
||||||
{
|
|
||||||
connect(this, &AspectContainer::fromMapFinished, [this] {
|
|
||||||
// FIXME: Update project page e.g. on "Restore Global", aspects
|
|
||||||
// there are 'autoapply', and Aspect::cancel() is normally part of
|
|
||||||
// the 'manual apply' machinery.
|
|
||||||
setAutoApply(false);
|
|
||||||
cancel();
|
|
||||||
setAutoApply(true);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// ValgrindOptionsPage
|
// ValgrindOptionsPage
|
||||||
//
|
//
|
||||||
@@ -454,5 +436,4 @@ public:
|
|||||||
|
|
||||||
const ValgrindOptionsPage settingsPage;
|
const ValgrindOptionsPage settingsPage;
|
||||||
|
|
||||||
|
|
||||||
} // Valgrind::Internal
|
} // Valgrind::Internal
|
||||||
|
@@ -31,19 +31,20 @@ private:
|
|||||||
void bufferToGui() override;
|
void bufferToGui() override;
|
||||||
bool guiToBuffer() override;
|
bool guiToBuffer() override;
|
||||||
|
|
||||||
friend class ValgrindBaseSettings;
|
friend class ValgrindSettings;
|
||||||
SuppressionAspectPrivate *d = nullptr;
|
SuppressionAspectPrivate *d = nullptr;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Valgrind settings shared for global and per-project.
|
* Valgrind settings shared for global and per-project.
|
||||||
*/
|
*/
|
||||||
class ValgrindBaseSettings : public Utils::AspectContainer
|
class ValgrindSettings : public Utils::AspectContainer
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit ValgrindBaseSettings(bool global);
|
// These exists once globally, and once per project
|
||||||
|
explicit ValgrindSettings(bool global);
|
||||||
|
|
||||||
enum SelfModifyingCodeDetection {
|
enum SelfModifyingCodeDetection {
|
||||||
DetectSmcNo,
|
DetectSmcNo,
|
||||||
@@ -58,20 +59,14 @@ public:
|
|||||||
LeakCheckOnFinishYes
|
LeakCheckOnFinishYes
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
// Generic valgrind settings
|
||||||
* Base valgrind settings
|
|
||||||
*/
|
|
||||||
public:
|
|
||||||
Utils::FilePathAspect valgrindExecutable{this};
|
Utils::FilePathAspect valgrindExecutable{this};
|
||||||
Utils::StringAspect valgrindArguments{this};
|
Utils::StringAspect valgrindArguments{this};
|
||||||
Utils::SelectionAspect selfModifyingCodeDetection{this};
|
Utils::SelectionAspect selfModifyingCodeDetection{this};
|
||||||
|
|
||||||
SuppressionAspect suppressions;
|
SuppressionAspect suppressions;
|
||||||
|
|
||||||
/**
|
// Memcheck
|
||||||
* Base memcheck settings
|
|
||||||
*/
|
|
||||||
public:
|
|
||||||
Utils::StringAspect memcheckArguments{this};
|
Utils::StringAspect memcheckArguments{this};
|
||||||
Utils::IntegerAspect numCallers{this};
|
Utils::IntegerAspect numCallers{this};
|
||||||
Utils::SelectionAspect leakCheckOnFinish{this};
|
Utils::SelectionAspect leakCheckOnFinish{this};
|
||||||
@@ -80,12 +75,12 @@ public:
|
|||||||
Utils::BoolAspect filterExternalIssues{this};
|
Utils::BoolAspect filterExternalIssues{this};
|
||||||
Utils::IntegersAspect visibleErrorKinds{this};
|
Utils::IntegersAspect visibleErrorKinds{this};
|
||||||
|
|
||||||
|
Utils::FilePathAspect lastSuppressionDirectory{this}; // Global only
|
||||||
|
Utils::StringAspect lastSuppressionHistory{this}; // Global only
|
||||||
|
|
||||||
void setVisibleErrorKinds(const QList<int> &);
|
void setVisibleErrorKinds(const QList<int> &);
|
||||||
|
|
||||||
/**
|
// Callgrind
|
||||||
* Base callgrind settings
|
|
||||||
*/
|
|
||||||
public:
|
|
||||||
Utils::StringAspect callgrindArguments{this};
|
Utils::StringAspect callgrindArguments{this};
|
||||||
Utils::FilePathAspect kcachegrindExecutable{this};
|
Utils::FilePathAspect kcachegrindExecutable{this};
|
||||||
|
|
||||||
@@ -96,46 +91,12 @@ public:
|
|||||||
Utils::BoolAspect enableEventToolTips{this};
|
Utils::BoolAspect enableEventToolTips{this};
|
||||||
Utils::DoubleAspect minimumInclusiveCostRatio{this};
|
Utils::DoubleAspect minimumInclusiveCostRatio{this};
|
||||||
Utils::DoubleAspect visualizationMinimumInclusiveCostRatio{this};
|
Utils::DoubleAspect visualizationMinimumInclusiveCostRatio{this};
|
||||||
|
|
||||||
|
Utils::SelectionAspect costFormat{this}; // Global only
|
||||||
|
Utils::BoolAspect detectCycles{this}; // Global only
|
||||||
|
Utils::BoolAspect shortenTemplates{this}; // Global only
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
ValgrindSettings &globalSettings();
|
||||||
* Global valgrind settings
|
|
||||||
*/
|
|
||||||
class ValgrindGlobalSettings : public ValgrindBaseSettings
|
|
||||||
{
|
|
||||||
Q_OBJECT
|
|
||||||
|
|
||||||
public:
|
|
||||||
ValgrindGlobalSettings();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Global memcheck settings
|
|
||||||
*/
|
|
||||||
|
|
||||||
Utils::FilePathAspect lastSuppressionDirectory{this};
|
|
||||||
Utils::StringAspect lastSuppressionHistory{this};
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Global callgrind settings
|
|
||||||
*/
|
|
||||||
Utils::SelectionAspect costFormat{this};
|
|
||||||
Utils::BoolAspect detectCycles{this};
|
|
||||||
Utils::BoolAspect shortenTemplates{this};
|
|
||||||
};
|
|
||||||
|
|
||||||
ValgrindGlobalSettings &globalSettings();
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Per-project valgrind settings.
|
|
||||||
*/
|
|
||||||
class ValgrindProjectSettings : public ValgrindBaseSettings
|
|
||||||
{
|
|
||||||
Q_OBJECT
|
|
||||||
|
|
||||||
public:
|
|
||||||
ValgrindProjectSettings();
|
|
||||||
};
|
|
||||||
|
|
||||||
} // Valgrind::Internal
|
} // Valgrind::Internal
|
||||||
|
Reference in New Issue
Block a user