diff --git a/src/plugins/debugger/cdb/cdbengine.cpp b/src/plugins/debugger/cdb/cdbengine.cpp index fe0b96a7e89..2ac44c51881 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 ea83f546565..6b890f8eabf 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 14a29482b41..f0bf82ea7dc 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 1965ec9e431..77190c7965c 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 f8a3027b417..647449105f3 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 + + + + + +