Fixes: debugger: work on more fine-grained breakpoints-in-plugins

setting
This commit is contained in:
hjk
2009-02-12 11:18:38 +01:00
parent d5dc6d10d7
commit 4839cc9392
5 changed files with 122 additions and 59 deletions

View File

@@ -200,6 +200,11 @@ public:
bool m_useToolTips; bool m_useToolTips;
QString m_scriptFile; QString m_scriptFile;
bool m_pluginAllBreakpoints;
bool m_pluginSelectedBreakpoints;
bool m_pluginNoBreakpoints;
QString m_pluginSelectedBreakpointsPattern;
}; };
// //

View File

@@ -274,15 +274,24 @@ QWidget *GdbOptionPage::createPage(QWidget *parent)
m_ui.scriptFileChooser->setPromptDialogTitle(tr("Choose Location of Startup Script File")); m_ui.scriptFileChooser->setPromptDialogTitle(tr("Choose Location of Startup Script File"));
m_ui.scriptFileChooser->setPath(m_settings.m_scriptFile); m_ui.scriptFileChooser->setPath(m_settings.m_scriptFile);
m_ui.environmentEdit->setText(m_settings.m_gdbEnv); m_ui.environmentEdit->setText(m_settings.m_gdbEnv);
m_ui.autoStartBox->setChecked(m_settings.m_autoRun);
m_ui.autoQuitBox->setChecked(m_settings.m_autoQuit); m_ui.radioButtonAllPluginBreakpoints->
setChecked(m_settings.m_pluginAllBreakpoints);
m_ui.radioButtonSelectedPluginBreakpoints->
setChecked(m_settings.m_pluginSelectedBreakpoints);
m_ui.radioButtonNoPluginBreakpoints->
setChecked(m_settings.m_pluginNoBreakpoints);
m_ui.lineEditSelectedPluginBreakpointsPattern->
setEnabled(m_settings.m_pluginSelectedBreakpoints);
m_ui.checkBoxSkipKnownFrames->setChecked(m_settings.m_skipKnownFrames); m_ui.checkBoxSkipKnownFrames->setChecked(m_settings.m_skipKnownFrames);
m_ui.checkBoxDebugDumpers->setChecked(m_settings.m_debugDumpers); m_ui.checkBoxDebugDumpers->setChecked(m_settings.m_debugDumpers);
m_ui.checkBoxUseCustomDumpers->setChecked(m_settings.m_useCustomDumpers); m_ui.checkBoxUseCustomDumpers->setChecked(m_settings.m_useCustomDumpers);
m_ui.checkBoxFastStart->setChecked(m_settings.m_useFastStart);
m_ui.checkBoxUseToolTips->setChecked(m_settings.m_useToolTips); m_ui.checkBoxUseToolTips->setChecked(m_settings.m_useToolTips);
connect(m_ui.radioButtonSelectedPluginBreakpoints, SIGNAL(toggled(bool)),
m_ui.lineEditSelectedPluginBreakpointsPattern, SLOT(setEnabled(bool)));
#ifndef QT_DEBUG #ifndef QT_DEBUG
#if 0 #if 0
cmd = am->registerAction(m_manager->m_dumpLogAction, cmd = am->registerAction(m_manager->m_dumpLogAction,
@@ -294,14 +303,9 @@ QWidget *GdbOptionPage::createPage(QWidget *parent)
#endif #endif
// FIXME // FIXME
m_ui.autoStartBox->hide();
m_ui.autoQuitBox->hide();
m_ui.environmentEdit->hide(); m_ui.environmentEdit->hide();
m_ui.labelEnvironment->hide(); m_ui.labelEnvironment->hide();
m_ui.checkBoxFastStart->setChecked(false);
m_ui.checkBoxFastStart->hide();
//m_dumpLogAction = new QAction(this); //m_dumpLogAction = new QAction(this);
//m_dumpLogAction->setText(tr("Dump Log File for Debugging Purposes")); //m_dumpLogAction->setText(tr("Dump Log File for Debugging Purposes"));
// //
@@ -315,16 +319,23 @@ void GdbOptionPage::apply()
{ {
m_settings.m_gdbCmd = m_ui.gdbLocationChooser->path(); m_settings.m_gdbCmd = m_ui.gdbLocationChooser->path();
m_settings.m_gdbEnv = m_ui.environmentEdit->text(); m_settings.m_gdbEnv = m_ui.environmentEdit->text();
m_settings.m_autoRun = m_ui.autoStartBox->isChecked();
m_settings.m_autoQuit = m_ui.autoQuitBox->isChecked();
m_settings.m_scriptFile = m_ui.scriptFileChooser->path(); m_settings.m_scriptFile = m_ui.scriptFileChooser->path();
m_settings.m_skipKnownFrames = m_ui.checkBoxSkipKnownFrames->isChecked(); m_settings.m_skipKnownFrames = m_ui.checkBoxSkipKnownFrames->isChecked();
m_settings.m_debugDumpers = m_ui.checkBoxDebugDumpers->isChecked(); m_settings.m_debugDumpers = m_ui.checkBoxDebugDumpers->isChecked();
m_settings.m_useCustomDumpers = m_ui.checkBoxUseCustomDumpers->isChecked(); m_settings.m_useCustomDumpers = m_ui.checkBoxUseCustomDumpers->isChecked();
m_settings.m_useFastStart = m_ui.checkBoxFastStart->isChecked();
m_settings.m_useToolTips = m_ui.checkBoxUseToolTips->isChecked(); m_settings.m_useToolTips = m_ui.checkBoxUseToolTips->isChecked();
m_settings.m_pluginAllBreakpoints =
m_ui.radioButtonAllPluginBreakpoints->isChecked();
m_settings.m_pluginSelectedBreakpoints =
m_ui.radioButtonSelectedPluginBreakpoints->isChecked();
m_settings.m_pluginNoBreakpoints =
m_ui.radioButtonNoPluginBreakpoints->isChecked();
m_settings.m_pluginSelectedBreakpointsPattern =
m_ui.lineEditSelectedPluginBreakpointsPattern->text();
*m_plugin->m_manager->settings() = m_settings; *m_plugin->m_manager->settings() = m_settings;
m_plugin->writeSettings(); m_plugin->writeSettings();
} }
@@ -889,11 +900,16 @@ void DebuggerPlugin::writeSettings() const
s->setValue("AutoRun", m->m_autoRun); s->setValue("AutoRun", m->m_autoRun);
s->setValue("AutoQuit", m->m_autoQuit); s->setValue("AutoQuit", m->m_autoQuit);
s->setValue("UseFastStart", m->m_useFastStart);
s->setValue("UseToolTips", m->m_useToolTips); s->setValue("UseToolTips", m->m_useToolTips);
s->setValue("UseCustomDumpers", m->m_useCustomDumpers); s->setValue("UseCustomDumpers", m->m_useCustomDumpers);
s->setValue("SkipKnowFrames", m->m_skipKnownFrames); s->setValue("SkipKnowFrames", m->m_skipKnownFrames);
s->setValue("DebugDumpers", m->m_debugDumpers); s->setValue("DebugDumpers", m->m_debugDumpers);
s->setValue("AllPluginBreakpoints", m->m_pluginAllBreakpoints);
s->setValue("SelectedPluginBreakpoints", m->m_pluginSelectedBreakpoints);
s->setValue("NoPluginBreakpoints", m->m_pluginNoBreakpoints);
s->setValue("SelectedPluginBreakpointsPattern", m->m_pluginSelectedBreakpointsPattern);
s->endGroup(); s->endGroup();
} }
@@ -911,6 +927,7 @@ void DebuggerPlugin::readSettings()
QString defaultScript; QString defaultScript;
s->beginGroup(QLatin1String("DebugMode")); s->beginGroup(QLatin1String("DebugMode"));
QByteArray ba = s->value("State", QByteArray()).toByteArray(); QByteArray ba = s->value("State", QByteArray()).toByteArray();
m_toggleLockedAction->setChecked(s->value("Locked", true).toBool()); m_toggleLockedAction->setChecked(s->value("Locked", true).toBool());
m->m_gdbCmd = s->value("Location", defaultCommand).toString(); m->m_gdbCmd = s->value("Location", defaultCommand).toString();
@@ -922,8 +939,17 @@ void DebuggerPlugin::readSettings()
m->m_skipKnownFrames = s->value("SkipKnownFrames", false).toBool(); m->m_skipKnownFrames = s->value("SkipKnownFrames", false).toBool();
m->m_debugDumpers = s->value("DebugDumpers", false).toBool(); m->m_debugDumpers = s->value("DebugDumpers", false).toBool();
m->m_useCustomDumpers = s->value("UseCustomDumpers", true).toBool(); m->m_useCustomDumpers = s->value("UseCustomDumpers", true).toBool();
m->m_useFastStart = s->value("UseFastStart", false).toBool();
m->m_useToolTips = s->value("UseToolTips", false).toBool(); m->m_useToolTips = s->value("UseToolTips", false).toBool();
m->m_pluginAllBreakpoints =
s->value("AllPluginBreakpoints", false).toBool();
m->m_pluginSelectedBreakpoints =
s->value("SelectedPluginBreakpoints", false).toBool();
m->m_pluginNoBreakpoints =
s->value("NoPluginBreakpoints", true).toBool();
m->m_pluginSelectedBreakpointsPattern =
s->value("SelectedPluginBreakpointsPattern").toString();
s->endGroup(); s->endGroup();
m_manager->mainWindow()->restoreState(ba); m_manager->mainWindow()->restoreState(ba);

View File

@@ -764,7 +764,7 @@ void GdbEngine::handleResult(const GdbResultRecord & record, int type,
handleExecStart1(record); handleExecStart1(record);
break; break;
case GdbExecStart2: case GdbExecStart2:
handleExecStart2(record); //handleExecStart2(record);
break; break;
case GdbExecStart3: case GdbExecStart3:
handleExecStart3(record); handleExecStart3(record);
@@ -1726,7 +1726,7 @@ void GdbEngine::handleExecStart1(const GdbResultRecord &response)
} }
} }
void GdbEngine::handleExecStart3(const GdbResultRecord &response) void GdbEngine::handleExecStart3(const GdbResultRecord &)
{ {
#if defined(Q_OS_WIN) #if defined(Q_OS_WIN)
sendCommand("info proc", GdbInfoProc); sendCommand("info proc", GdbInfoProc);

View File

@@ -186,7 +186,6 @@ private:
void handleFileExecAndSymbols(const GdbResultRecord &response); void handleFileExecAndSymbols(const GdbResultRecord &response);
void handleExecRun(const GdbResultRecord &response); void handleExecRun(const GdbResultRecord &response);
void handleExecStart1(const GdbResultRecord &response); void handleExecStart1(const GdbResultRecord &response);
void handleExecStart2(const GdbResultRecord &response);
void handleExecStart3(const GdbResultRecord &response); void handleExecStart3(const GdbResultRecord &response);
void handleExecJumpToLine(const GdbResultRecord &response); void handleExecJumpToLine(const GdbResultRecord &response);
void handleExecRunToFunction(const GdbResultRecord &response); void handleExecRunToFunction(const GdbResultRecord &response);

View File

@@ -6,22 +6,16 @@
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>465</width> <width>398</width>
<height>372</height> <height>385</height>
</rect> </rect>
</property> </property>
<property name="windowTitle"> <property name="windowTitle">
<string>Form</string> <string>Form</string>
</property> </property>
<layout class="QVBoxLayout"> <layout class="QGridLayout" name="gridLayout_2">
<property name="spacing"> <item row="0" column="0">
<number>6</number> <widget class="QGroupBox" name="groupBoxLocations">
</property>
<property name="margin">
<number>9</number>
</property>
<item>
<widget class="QGroupBox" name="groupBox">
<property name="title"> <property name="title">
<string>Locations</string> <string>Locations</string>
</property> </property>
@@ -74,7 +68,70 @@
</layout> </layout>
</widget> </widget>
</item> </item>
<item> <item row="1" column="0">
<widget class="QGroupBox" name="groupBoxPluginDebugging">
<property name="title">
<string>Behaviour of breakpoint setting in plugins</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
<widget class="QRadioButton" name="radioButtonAllPluginBreakpoints">
<property name="toolTip">
<string>This is the slowest but safest option.</string>
</property>
<property name="text">
<string>Try to set breakpoints in plugins always automatically.</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QRadioButton" name="radioButtonSelectedPluginBreakpoints">
<property name="text">
<string>Try to set breakpoints in selected plugins</string>
</property>
</widget>
</item>
<item row="2" column="0">
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Preferred</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>10</width>
<height>10</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QLabel" name="labelSelectedPluginBreakpoints">
<property name="text">
<string>Matching regular expression: </string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="lineEditSelectedPluginBreakpointsPattern"/>
</item>
</layout>
</item>
<item row="3" column="0">
<widget class="QRadioButton" name="radioButtonNoPluginBreakpoints">
<property name="text">
<string>Never set breakpoints in plugins automatically</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item row="2" column="0">
<widget class="QCheckBox" name="checkBoxUseCustomDumpers"> <widget class="QCheckBox" name="checkBoxUseCustomDumpers">
<property name="toolTip"> <property name="toolTip">
<string>Checking this will make the debugger try to use code to format certain data (QObject, QString, std::string etc.) nicely.</string> <string>Checking this will make the debugger try to use code to format certain data (QObject, QString, std::string etc.) nicely.</string>
@@ -84,17 +141,7 @@
</property> </property>
</widget> </widget>
</item> </item>
<item> <item row="3" column="0">
<widget class="QCheckBox" name="checkBoxFastStart">
<property name="toolTip">
<string>Checking this will make the debugger start fast by loading only very few debug symbols on start up. This might lead to situations where breakpoints can not be set properly. So uncheck this option if you experience breakpoint related problems.</string>
</property>
<property name="text">
<string>Fast debugger start</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="checkBoxSkipKnownFrames"> <widget class="QCheckBox" name="checkBoxSkipKnownFrames">
<property name="toolTip"> <property name="toolTip">
<string>When this option is checked, 'Step Into' compresses several steps into one in certain situations, leading to 'less noisy' debugging. So will, e.g., the atomic <string>When this option is checked, 'Step Into' compresses several steps into one in certain situations, leading to 'less noisy' debugging. So will, e.g., the atomic
@@ -105,7 +152,7 @@
</property> </property>
</widget> </widget>
</item> </item>
<item> <item row="4" column="0">
<widget class="QCheckBox" name="checkBoxUseToolTips"> <widget class="QCheckBox" name="checkBoxUseToolTips">
<property name="toolTip"> <property name="toolTip">
<string>Checking this will make enable tooltips for variable values during debugging. Since this can slow down debugging and does not provide reliable information as it does not use scope information, it is switched off by default.</string> <string>Checking this will make enable tooltips for variable values during debugging. Since this can slow down debugging and does not provide reliable information as it does not use scope information, it is switched off by default.</string>
@@ -115,7 +162,7 @@
</property> </property>
</widget> </widget>
</item> </item>
<item> <item row="5" column="0">
<widget class="QCheckBox" name="checkBoxDebugDumpers"> <widget class="QCheckBox" name="checkBoxDebugDumpers">
<property name="toolTip"> <property name="toolTip">
<string notr="true">This is an internal tool to make debugging the Custom Data Dumper code easier. Using this action is in general not needed unless you want do debug Qt Creator itself.</string> <string notr="true">This is an internal tool to make debugging the Custom Data Dumper code easier. Using this action is in general not needed unless you want do debug Qt Creator itself.</string>
@@ -125,29 +172,15 @@
</property> </property>
</widget> </widget>
</item> </item>
<item> <item row="6" column="0">
<widget class="QCheckBox" name="autoStartBox"> <spacer name="verticalSpacer">
<property name="text">
<string>Auto run executable on debugger startup</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="autoQuitBox">
<property name="text">
<string>Quit debugger when the executable exits</string>
</property>
</widget>
</item>
<item>
<spacer>
<property name="orientation"> <property name="orientation">
<enum>Qt::Vertical</enum> <enum>Qt::Vertical</enum>
</property> </property>
<property name="sizeHint" stdset="0"> <property name="sizeHint" stdset="0">
<size> <size>
<width>415</width> <width>10</width>
<height>41</height> <height>1</height>
</size> </size>
</property> </property>
</spacer> </spacer>