From 518b6fcebc6eb723560d39025f177125c3f2fdb2 Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Tue, 6 Nov 2012 10:11:57 +0100 Subject: CDB: Add setting to ignore first-chance exceptions. - Add setting for command line option -x. Task-number: QTCREATORBUG-8141 Change-Id: Id53b9d7d207e2e2c86886db9d0a8c9f5348b659b Reviewed-by: Joerg Bornemann --- src/plugins/debugger/cdb/cdbengine.cpp | 2 ++ src/plugins/debugger/cdb/cdboptions.cpp | 12 ++++++++++-- src/plugins/debugger/cdb/cdboptions.h | 2 ++ src/plugins/debugger/cdb/cdboptionspage.cpp | 2 ++ src/plugins/debugger/cdb/cdboptionspagewidget.ui | 16 ++++++++++++++++ 5 files changed, 32 insertions(+), 2 deletions(-) diff --git a/src/plugins/debugger/cdb/cdbengine.cpp b/src/plugins/debugger/cdb/cdbengine.cpp index fe0b96a7e8..2ac44c5188 100644 --- a/src/plugins/debugger/cdb/cdbengine.cpp +++ b/src/plugins/debugger/cdb/cdbengine.cpp @@ -668,6 +668,8 @@ bool CdbEngine::launchCDB(const DebuggerStartParameters &sp, QString *errorMessa << QLatin1String(".idle_cmd ") + QString::fromLatin1(m_extensionCommandPrefixBA) + QLatin1String("idle"); if (sp.useTerminal) // Separate console arguments << QLatin1String("-2"); + if (m_options->ignoreFirstChanceAccessViolation) + arguments << QLatin1String("-x"); if (!m_options->symbolPaths.isEmpty()) arguments << QLatin1String("-y") << m_options->symbolPaths.join(QString(QLatin1Char(';'))); if (!m_options->sourcePaths.isEmpty()) diff --git a/src/plugins/debugger/cdb/cdboptions.cpp b/src/plugins/debugger/cdb/cdboptions.cpp index ea83f54656..6b890f8eab 100644 --- a/src/plugins/debugger/cdb/cdboptions.cpp +++ b/src/plugins/debugger/cdb/cdboptions.cpp @@ -39,13 +39,17 @@ static const char breakFunctionsKeyC[] = "BreakFunctions"; static const char additionalArgumentsKeyC[] = "AdditionalArguments"; static const char cdbConsoleKeyC[] = "CDB_Console"; static const char breakpointCorrectionKeyC[] = "BreakpointCorrection"; +static const char ignoreFirstChanceAccessViolationKeyC[] = "IgnoreFirstChanceAccessViolation"; namespace Debugger { namespace Internal { const char *CdbOptions::crtDbgReport = "CrtDbgReport"; -CdbOptions::CdbOptions() : cdbConsole(false), breakpointCorrection(true) +CdbOptions::CdbOptions() + : cdbConsole(false) + , breakpointCorrection(true) + , ignoreFirstChanceAccessViolation(false) { } @@ -58,7 +62,8 @@ void CdbOptions::clear() { symbolPaths.clear(); sourcePaths.clear(); - cdbConsole = false; + breakpointCorrection = true; + cdbConsole = ignoreFirstChanceAccessViolation = false; breakEvents.clear(); breakFunctions.clear(); } @@ -79,6 +84,7 @@ void CdbOptions::fromSettings(QSettings *s) breakFunctions = s->value(keyRoot + QLatin1String(breakFunctionsKeyC), QStringList()).toStringList(); cdbConsole = s->value(keyRoot + QLatin1String(cdbConsoleKeyC), QVariant(false)).toBool(); breakpointCorrection = s->value(keyRoot + QLatin1String(breakpointCorrectionKeyC), QVariant(true)).toBool(); + ignoreFirstChanceAccessViolation = s->value(keyRoot + QLatin1String(ignoreFirstChanceAccessViolationKeyC), false).toBool(); } void CdbOptions::toSettings(QSettings *s) const @@ -91,6 +97,7 @@ void CdbOptions::toSettings(QSettings *s) const s->setValue(QLatin1String(additionalArgumentsKeyC), additionalArguments); s->setValue(QLatin1String(cdbConsoleKeyC), QVariant(cdbConsole)); s->setValue(QLatin1String(breakpointCorrectionKeyC), QVariant(breakpointCorrection)); + s->setValue(QLatin1String(ignoreFirstChanceAccessViolationKeyC), QVariant(ignoreFirstChanceAccessViolation)); s->endGroup(); } @@ -98,6 +105,7 @@ bool CdbOptions::equals(const CdbOptions &rhs) const { return cdbConsole == rhs.cdbConsole && breakpointCorrection == rhs.breakpointCorrection + && ignoreFirstChanceAccessViolation == rhs.ignoreFirstChanceAccessViolation && additionalArguments == rhs.additionalArguments && symbolPaths == rhs.symbolPaths && sourcePaths == rhs.sourcePaths diff --git a/src/plugins/debugger/cdb/cdboptions.h b/src/plugins/debugger/cdb/cdboptions.h index 14a29482b4..f0bf82ea7d 100644 --- a/src/plugins/debugger/cdb/cdboptions.h +++ b/src/plugins/debugger/cdb/cdboptions.h @@ -66,6 +66,8 @@ public: bool cdbConsole; // Perform code-model based correction of breakpoint location. bool breakpointCorrection; + // Add -x to command line. + bool ignoreFirstChanceAccessViolation; static const char *crtDbgReport; }; diff --git a/src/plugins/debugger/cdb/cdboptionspage.cpp b/src/plugins/debugger/cdb/cdboptionspage.cpp index 1965ec9e43..77190c7965 100644 --- a/src/plugins/debugger/cdb/cdboptionspage.cpp +++ b/src/plugins/debugger/cdb/cdboptionspage.cpp @@ -253,6 +253,7 @@ void CdbOptionsPageWidget::setOptions(CdbOptions &o) m_ui.additionalArgumentsLineEdit->setText(o.additionalArguments); setSymbolPaths(o.symbolPaths); setSourcePaths(o.sourcePaths); + m_ui.ignoreFirstChanceAccessViolationCheckBox->setChecked(o.ignoreFirstChanceAccessViolation); m_breakEventWidget->setBreakEvents(o.breakEvents); m_ui.consoleCheckBox->setChecked(o.cdbConsole); m_ui.breakpointCorrectionCheckBox->setChecked(o.breakpointCorrection); @@ -265,6 +266,7 @@ CdbOptions CdbOptionsPageWidget::options() const rc.additionalArguments = m_ui.additionalArgumentsLineEdit->text().trimmed(); rc.symbolPaths = m_symbolPaths; rc.sourcePaths = m_sourcePaths; + rc.ignoreFirstChanceAccessViolation = m_ui.ignoreFirstChanceAccessViolationCheckBox->isChecked(); rc.breakEvents = m_breakEventWidget->breakEvents(); rc.cdbConsole = m_ui.consoleCheckBox->isChecked(); rc.breakpointCorrection = m_ui.breakpointCorrectionCheckBox->isChecked(); diff --git a/src/plugins/debugger/cdb/cdboptionspagewidget.ui b/src/plugins/debugger/cdb/cdboptionspagewidget.ui index f8a3027b41..647449105f 100644 --- a/src/plugins/debugger/cdb/cdboptionspagewidget.ui +++ b/src/plugins/debugger/cdb/cdboptionspagewidget.ui @@ -137,6 +137,22 @@ + + + + Various + + + + + + Ignore first chance access violations + + + + + + -- cgit v1.2.1