summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@digia.com>2012-11-06 10:11:57 +0100
committerFriedemann Kleint <Friedemann.Kleint@digia.com>2012-11-06 12:29:02 +0100
commit518b6fcebc6eb723560d39025f177125c3f2fdb2 (patch)
treec5b631334a37db94d7916de6abd5d05293c0549f
parente7b6108934904b38eadf92b2b0d92e48d3fe4513 (diff)
downloadqt-creator-518b6fcebc6eb723560d39025f177125c3f2fdb2.tar.gz
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 <joerg.bornemann@digia.com>
-rw-r--r--src/plugins/debugger/cdb/cdbengine.cpp2
-rw-r--r--src/plugins/debugger/cdb/cdboptions.cpp12
-rw-r--r--src/plugins/debugger/cdb/cdboptions.h2
-rw-r--r--src/plugins/debugger/cdb/cdboptionspage.cpp2
-rw-r--r--src/plugins/debugger/cdb/cdboptionspagewidget.ui16
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
@@ -138,6 +138,22 @@
</layout>
</item>
<item>
+ <widget class="QGroupBox" name="variousGroupBox">
+ <property name="title">
+ <string>Various</string>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout_3">
+ <item>
+ <widget class="QCheckBox" name="ignoreFirstChanceAccessViolationCheckBox">
+ <property name="text">
+ <string>Ignore first chance access violations</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item>
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>