diff --git a/src/plugins/debugger/breakhandler.cpp b/src/plugins/debugger/breakhandler.cpp index 22e0fc02e0c756332c19bb321eabbc52bd0e744c..d1a05b0de3c9a41d9921e7e5febd9c61196279f6 100644 --- a/src/plugins/debugger/breakhandler.cpp +++ b/src/plugins/debugger/breakhandler.cpp @@ -534,7 +534,7 @@ void BreakHandler::loadSessionData() updateMarkers(); } -void BreakHandler::activateBreakPoint(int index) +void BreakHandler::activateBreakpoint(int index) { const BreakpointData *data = at(index); //qDebug() << "BREAKPOINT ACTIVATED: " << data->fileName; diff --git a/src/plugins/debugger/breakhandler.h b/src/plugins/debugger/breakhandler.h index f28f3870e6c042f1e2dead8c8d302837a23c08c4..c9598ddec5fc2f65d3450f3c1a3952c91d09340a 100644 --- a/src/plugins/debugger/breakhandler.h +++ b/src/plugins/debugger/breakhandler.h @@ -134,7 +134,7 @@ public: public slots: void setBreakpoint(const QString &fileName, int lineNumber); void breakByFunction(const QString &functionName); - void activateBreakPoint(int index); + void activateBreakpoint(int index); void removeBreakpoint(int index); signals: diff --git a/src/plugins/debugger/breakwindow.cpp b/src/plugins/debugger/breakwindow.cpp index 3a80673b412b59c259cd82b5a6fff2221abbb4d8..91b89f59a7b677ea12b84541743d85c19646af23 100644 --- a/src/plugins/debugger/breakwindow.cpp +++ b/src/plugins/debugger/breakwindow.cpp @@ -85,18 +85,23 @@ void BreakWindow::contextMenuEvent(QContextMenuEvent *ev) QMenu menu; QModelIndex index = indexAt(ev->pos()); QAction *act0 = new QAction("Delete breakpoint", &menu); + act0->setEnabled(index.isValid()); QAction *act1 = new QAction("Adjust column widths to contents", &menu); QAction *act2 = new QAction("Always adjust column widths to contents", &menu); - QAction *act3 = new QAction("Edit condition...", &menu); act2->setCheckable(true); act2->setChecked(m_alwaysResizeColumnsToContents); - if (index.isValid()) { - menu.addAction(act0); - menu.addAction(act3); - menu.addSeparator(); - } + QAction *act3 = new QAction("Edit condition...", &menu); + act0->setEnabled(index.isValid()); + QAction *act4 = new QAction("Syncronize breakpoints", &menu); + QAction *act5 = new QAction("Debugger properties...", &menu); + + menu.addAction(act0); + menu.addAction(act3); + menu.addSeparator(); menu.addAction(act1); menu.addAction(act2); + menu.addAction(act4); + menu.addAction(act5); QAction *act = menu.exec(ev->globalPos()); @@ -108,6 +113,10 @@ void BreakWindow::contextMenuEvent(QContextMenuEvent *ev) setAlwaysResizeColumnsToContents(!m_alwaysResizeColumnsToContents); else if (act == act3) editCondition(index); + else if (act == act4) + emit breakpointSynchronizationRequested(); + else if (act == act5) + emit settingsDialogRequested(); } void BreakWindow::deleteBreakpoint(const QModelIndex &idx) @@ -116,7 +125,7 @@ void BreakWindow::deleteBreakpoint(const QModelIndex &idx) if (row == model()->rowCount() - 1) --row; setCurrentIndex(idx.sibling(row, 0)); - emit breakPointDeleted(idx.row()); + emit breakpointDeleted(idx.row()); } void BreakWindow::editCondition(const QModelIndex &idx) @@ -158,6 +167,6 @@ void BreakWindow::setAlwaysResizeColumnsToContents(bool on) void BreakWindow::rowActivated(const QModelIndex &index) { - emit breakPointActivated(index.row()); + emit breakpointActivated(index.row()); } diff --git a/src/plugins/debugger/breakwindow.h b/src/plugins/debugger/breakwindow.h index ec8ee2377d54394c501f198a56293961d2a4e835..f6bd9111b9bda38d9f297773781d812544d95468 100644 --- a/src/plugins/debugger/breakwindow.h +++ b/src/plugins/debugger/breakwindow.h @@ -47,8 +47,10 @@ public slots: void setAlwaysResizeColumnsToContents(bool on); signals: - void breakPointDeleted(int index); - void breakPointActivated(int index); + void breakpointDeleted(int index); + void breakpointActivated(int index); + void breakpointSynchronizationRequested(); + void settingsDialogRequested(); private slots: void rowActivated(const QModelIndex &index); diff --git a/src/plugins/debugger/debuggermanager.cpp b/src/plugins/debugger/debuggermanager.cpp index 4dcab14555570fcfebc35bd5e36ef22dcdecf22d..6d8954499e02a2e09eaa43eb7b7a5a57b75ae413 100644 --- a/src/plugins/debugger/debuggermanager.cpp +++ b/src/plugins/debugger/debuggermanager.cpp @@ -94,6 +94,7 @@ DebuggerSettings::DebuggerSettings() m_debugDumpers = false; m_useToolTips = false; m_useCustomDumpers = true; + m_listSourceFiles = false; } /////////////////////////////////////////////////////////////////////// @@ -209,10 +210,14 @@ void DebuggerManager::init() QAbstractItemView *breakView = qobject_cast<QAbstractItemView *>(m_breakWindow); breakView->setModel(m_breakHandler->model()); - connect(breakView, SIGNAL(breakPointActivated(int)), - m_breakHandler, SLOT(activateBreakPoint(int))); - connect(breakView, SIGNAL(breakPointDeleted(int)), + connect(breakView, SIGNAL(breakpointActivated(int)), + m_breakHandler, SLOT(activateBreakpoint(int))); + connect(breakView, SIGNAL(breakpointDeleted(int)), m_breakHandler, SLOT(removeBreakpoint(int))); + connect(breakView, SIGNAL(settingsDialogRequested()), + this, SIGNAL(settingsDialogRequested())); + connect(breakView, SIGNAL(breakpointSynchronizationRequested()), + this, SLOT(attemptBreakpointSynchronization())); connect(m_breakHandler, SIGNAL(gotoLocation(QString,int,bool)), this, SLOT(gotoLocation(QString,int,bool))); connect(m_breakHandler, SIGNAL(sessionValueRequested(QString,QVariant*)), @@ -635,6 +640,7 @@ void DebuggerManager::shutdown() delete m_outputWindow; delete m_registerWindow; delete m_stackWindow; + delete m_sourceFilesWindow; delete m_threadsWindow; delete m_tooltipWindow; delete m_watchersWindow; @@ -646,6 +652,7 @@ void DebuggerManager::shutdown() m_outputWindow = 0; m_registerWindow = 0; m_stackWindow = 0; + m_sourceFilesWindow = 0; m_threadsWindow = 0; m_tooltipWindow = 0; m_watchersWindow = 0; @@ -701,6 +708,11 @@ void DebuggerManager::toggleBreakpoint(const QString &fileName, int lineNumber) m_engine->attemptBreakpointSynchronization(); } +void DebuggerManager::attemptBreakpointSynchronization() +{ + m_engine->attemptBreakpointSynchronization(); +} + void DebuggerManager::setToolTipExpression(const QPoint &pos, const QString &exp) { QTC_ASSERT(m_engine, return); @@ -960,6 +972,7 @@ void DebuggerManager::cleanupViews() disassemblerHandler()->removeAll(); modulesHandler()->removeAll(); watchHandler()->cleanup(); + m_sourceFilesWindow->removeAll(); } void DebuggerManager::exitDebugger() @@ -1215,6 +1228,7 @@ void DebuggerManager::setBusyCursor(bool busy) m_outputWindow->setCursor(cursor); m_registerWindow->setCursor(cursor); m_stackWindow->setCursor(cursor); + m_sourceFilesWindow->setCursor(cursor); m_threadsWindow->setCursor(cursor); m_tooltipWindow->setCursor(cursor); m_watchersWindow->setCursor(cursor); diff --git a/src/plugins/debugger/debuggermanager.h b/src/plugins/debugger/debuggermanager.h index 9594092cbf1f7f2706aa7942015cc67d6374c52e..41df44a4ca7671145bf879734887af4d2d881db4 100644 --- a/src/plugins/debugger/debuggermanager.h +++ b/src/plugins/debugger/debuggermanager.h @@ -164,6 +164,7 @@ private: virtual bool debugDumpers() const = 0; virtual bool useCustomDumpers() const = 0; + virtual bool wantsSourceFileList() const = 0; virtual bool wantsAllPluginBreakpoints() const = 0; virtual bool wantsSelectedPluginBreakpoints() const = 0; virtual bool wantsNoPluginBreakpoints() const = 0; @@ -196,6 +197,7 @@ public: bool m_debugDumpers; bool m_useFastStart; bool m_useToolTips; + bool m_listSourceFiles; QString m_scriptFile; @@ -307,6 +309,7 @@ private slots: void registerDockToggled(bool on); void setStatus(int status); void clearStatusMessage(); + void attemptBreakpointSynchronization(); private: // @@ -324,6 +327,8 @@ private: bool skipKnownFrames() const; bool debugDumpers() const; bool useCustomDumpers() const; + bool wantsSourceFileList() const + { return m_settings.m_listSourceFiles; } bool wantsAllPluginBreakpoints() const { return m_settings.m_pluginAllBreakpoints; } bool wantsSelectedPluginBreakpoints() const diff --git a/src/plugins/debugger/debuggerplugin.cpp b/src/plugins/debugger/debuggerplugin.cpp index b27f5ad6a67a306275b541a2e2a7ee9da4ae3581..42ee12784c9b18f678221537800744657df5ec0a 100644 --- a/src/plugins/debugger/debuggerplugin.cpp +++ b/src/plugins/debugger/debuggerplugin.cpp @@ -283,6 +283,7 @@ QWidget *GdbOptionPage::createPage(QWidget *parent) m_ui.lineEditSelectedPluginBreakpointsPattern-> setEnabled(m_settings.m_pluginSelectedBreakpoints); + m_ui.checkBoxListSourceFiles->setChecked(m_settings.m_listSourceFiles); m_ui.checkBoxSkipKnownFrames->setChecked(m_settings.m_skipKnownFrames); m_ui.checkBoxDebugDumpers->setChecked(m_settings.m_debugDumpers); m_ui.checkBoxUseCustomDumpers->setChecked(m_settings.m_useCustomDumpers); @@ -321,6 +322,7 @@ void GdbOptionPage::apply() m_settings.m_scriptFile = m_ui.scriptFileChooser->path(); m_settings.m_skipKnownFrames = m_ui.checkBoxSkipKnownFrames->isChecked(); + m_settings.m_listSourceFiles = m_ui.checkBoxListSourceFiles->isChecked(); m_settings.m_debugDumpers = m_ui.checkBoxDebugDumpers->isChecked(); m_settings.m_useCustomDumpers = m_ui.checkBoxUseCustomDumpers->isChecked(); m_settings.m_useToolTips = m_ui.checkBoxUseToolTips->isChecked(); @@ -907,6 +909,7 @@ void DebuggerPlugin::writeSettings() const s->setValue("UseToolTips", m->m_useToolTips); s->setValue("UseCustomDumpers", m->m_useCustomDumpers); + s->setValue("ListSourceFiles", m->m_listSourceFiles); s->setValue("SkipKnowFrames", m->m_skipKnownFrames); s->setValue("DebugDumpers", m->m_debugDumpers); @@ -945,6 +948,7 @@ void DebuggerPlugin::readSettings() m->m_debugDumpers = s->value("DebugDumpers", false).toBool(); m->m_useCustomDumpers = s->value("UseCustomDumpers", true).toBool(); m->m_useToolTips = s->value("UseToolTips", false).toBool(); + m->m_listSourceFiles = s->value("ListSourceFiles", false).toBool(); m->m_pluginAllBreakpoints = s->value("AllPluginBreakpoints", true).toBool(); diff --git a/src/plugins/debugger/gdbengine.cpp b/src/plugins/debugger/gdbengine.cpp index 26541acce93a4e0aba7161ece678d92986763482..7e15b447b7aa2e1d2d1f6d0e6b786b7228081567 100644 --- a/src/plugins/debugger/gdbengine.cpp +++ b/src/plugins/debugger/gdbengine.cpp @@ -1140,7 +1140,8 @@ void GdbEngine::handleAqcuiredInferior() #if defined(Q_OS_MAC) sendCommand("info pid", GdbInfoProc, QVariant(), NeedsStop); #endif - reloadSourceFiles(); + if (qq->wantsSourceFileList()) + reloadSourceFiles(); tryLoadCustomDumpers(); #ifndef Q_OS_MAC @@ -1297,7 +1298,8 @@ void GdbEngine::handleAsyncOutput(const GdbMi &data) frame.findChild("func").data() + '%'; QApplication::alert(q->mainWindow(), 3000); - reloadSourceFiles(); + if (qq->wantsSourceFileList()) + reloadSourceFiles(); sendCommand("-break-list", BreakList); QVariant var = QVariant::fromValue<GdbMi>(data); sendCommand("p 0", GdbAsyncOutput2, var); // dummy diff --git a/src/plugins/debugger/gdboptionpage.ui b/src/plugins/debugger/gdboptionpage.ui index 884080c1a302628b7a72e412cdd1c1fb05ecbe68..46ab3dc8212bf3b6b8f38e44818e1c48f69e2d9c 100644 --- a/src/plugins/debugger/gdboptionpage.ui +++ b/src/plugins/debugger/gdboptionpage.ui @@ -141,7 +141,7 @@ </property> </widget> </item> - <item row="3" column="0"> + <item row="4" column="0"> <widget class="QCheckBox" name="checkBoxSkipKnownFrames"> <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 @@ -152,7 +152,7 @@ </property> </widget> </item> - <item row="4" column="0"> + <item row="5" column="0"> <widget class="QCheckBox" name="checkBoxUseToolTips"> <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> @@ -162,7 +162,7 @@ </property> </widget> </item> - <item row="5" column="0"> + <item row="6" column="0"> <widget class="QCheckBox" name="checkBoxDebugDumpers"> <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> @@ -172,7 +172,7 @@ </property> </widget> </item> - <item row="6" column="0"> + <item row="7" column="0"> <spacer name="verticalSpacer"> <property name="orientation"> <enum>Qt::Vertical</enum> @@ -185,6 +185,16 @@ </property> </spacer> </item> + <item row="3" column="0"> + <widget class="QCheckBox" name="checkBoxListSourceFiles"> + <property name="toolTip"> + <string>Checking this will populate the source file view automatically but might slow down debugger startup considerably.</string> + </property> + <property name="text"> + <string>Populate source file view automatically</string> + </property> + </widget> + </item> </layout> </widget> <customwidgets> diff --git a/src/plugins/debugger/sourcefileswindow.cpp b/src/plugins/debugger/sourcefileswindow.cpp index 5c48ea68259db89861dd24c0ad636e7e70a61c26..91853c357af87f094b052e9bce8f8331e4e333ed 100644 --- a/src/plugins/debugger/sourcefileswindow.cpp +++ b/src/plugins/debugger/sourcefileswindow.cpp @@ -207,3 +207,10 @@ void SourceFilesWindow::setSourceFiles(const QMap<QString, QString> &sourceFiles m_model->setSourceFiles(sourceFiles); header()->setResizeMode(0, QHeaderView::ResizeToContents); } + +void SourceFilesWindow::removeAll() +{ + m_model->setSourceFiles(QMap<QString, QString>()); + header()->setResizeMode(0, QHeaderView::ResizeToContents); +} + diff --git a/src/plugins/debugger/sourcefileswindow.h b/src/plugins/debugger/sourcefileswindow.h index cd740859f2bc7bb6757060e3ca99ba00f65dc4ad..cf630c002950dcfe3c7668c408093aa8343b2266 100644 --- a/src/plugins/debugger/sourcefileswindow.h +++ b/src/plugins/debugger/sourcefileswindow.h @@ -53,6 +53,7 @@ public: ~SourceFilesWindow(); void setSourceFiles(const QMap<QString, QString> &sourceFiles); + void removeAll(); signals: void reloadSourceFilesRequested();