diff --git a/src/plugins/debugger/cdb/cdbdebugengine.cpp b/src/plugins/debugger/cdb/cdbdebugengine.cpp index 7ee4fde49c1f8594240b26c5d4241139b5f56b2e..391c5bc1aef3b006012932bf8a14c46a1dcdffeb 100644 --- a/src/plugins/debugger/cdb/cdbdebugengine.cpp +++ b/src/plugins/debugger/cdb/cdbdebugengine.cpp @@ -310,9 +310,9 @@ void CdbDebugEngine::setToolTipExpression(const QPoint &mousePos, TextEditor::IT void CdbDebugEnginePrivate::clearDisplay() { - manager()->threadsHandler()->removeAll(); - manager()->modulesHandler()->removeAll(); - manager()->registerHandler()->removeAll(); + m_engine->threadsHandler()->removeAll(); + m_engine->modulesHandler()->removeAll(); + m_engine->registerHandler()->removeAll(); } void CdbDebugEnginePrivate::checkVersion() @@ -510,7 +510,7 @@ void CdbDebugEnginePrivate::processCreatedAttached(ULONG64 processHandle, ULONG6 } // Clear any saved breakpoints and set initial breakpoints m_engine->executeDebuggerCommand(QLatin1String("bc")); - if (manager()->breakHandler()->hasPendingBreakpoints()) { + if (m_engine->breakHandler()->hasPendingBreakpoints()) { if (debugCDBExecution) qDebug() << "processCreatedAttached: Syncing breakpoints"; m_engine->attemptBreakpointSynchronization(); @@ -519,7 +519,7 @@ void CdbDebugEnginePrivate::processCreatedAttached(ULONG64 processHandle, ULONG6 // the exception to be delivered to the debugger // Also, see special handling in slotModulesLoaded(). if (m_mode == AttachCrashedExternal) { - const QString crashParameter = manager()->runControl()->sp().crashParameter; + const QString crashParameter = m_engine->runControl()->sp().crashParameter; if (!crashParameter.isEmpty()) { ULONG64 evtNr = crashParameter.toULongLong(); const HRESULT hr = interfaces().debugControl->SetNotifyEventHandle(evtNr); @@ -1251,7 +1251,7 @@ void CdbDebugEngine::reloadRegisters() const Registers registers = getRegisters(m_d->interfaces().debugControl, m_d->interfaces().debugRegisters, &errorMessage, intBase); if (registers.isEmpty() && !errorMessage.isEmpty()) warning(msgFunctionFailed("reloadRegisters" , errorMessage)); - manager()->registerHandler()->setRegisters(registers); + registerHandler()->setRegisters(registers); } void CdbDebugEngine::slotConsoleStubStarted() diff --git a/src/plugins/debugger/debuggermanager.cpp b/src/plugins/debugger/debuggermanager.cpp index 71d495ebf952422779f9a16a72662a9d7dfa5b88..1acffc10716bfef3634dda98b571e8212d12aefd 100644 --- a/src/plugins/debugger/debuggermanager.cpp +++ b/src/plugins/debugger/debuggermanager.cpp @@ -52,11 +52,8 @@ #include "watchwindow.h" #include "breakhandler.h" -#include "moduleshandler.h" -#include "registerhandler.h" #include "snapshothandler.h" #include "stackhandler.h" -#include "stackframe.h" #include "threadshandler.h" #include "watchhandler.h" @@ -280,7 +277,6 @@ struct DebuggerManagerPrivate // FIXME: Move to DebuggerRunControl BreakHandler *m_breakHandler; - RegisterHandler *m_registerHandler; SnapshotHandler *m_snapshotHandler; StackHandler *m_stackHandler; ThreadsHandler *m_threadsHandler; @@ -303,7 +299,7 @@ struct DebuggerManagerPrivate QWidget *m_returnWindow; QWidget *m_localsWindow; QWidget *m_watchersWindow; - QWidget *m_registerWindow; + QAbstractItemView *m_registerWindow; QAbstractItemView *m_modulesWindow; QWidget *m_snapshotWindow; SourceFilesWindow *m_sourceFilesWindow; @@ -358,7 +354,6 @@ DebuggerManager::~DebuggerManager() doDelete(d->m_breakHandler); doDelete(d->m_threadsHandler); - doDelete(d->m_registerHandler); doDelete(d->m_snapshotHandler); doDelete(d->m_stackHandler); doDelete(d->m_watchHandler); @@ -377,8 +372,6 @@ void DebuggerManager::init() d->m_state = DebuggerState(-1); d->m_busy = false; - d->m_registerHandler = 0; - d->m_statusLabel = new QLabel; d->m_statusLabel->setMinimumSize(QSize(30, 10)); @@ -468,13 +461,6 @@ void DebuggerManager::init() connect(sourceFilesView, SIGNAL(fileOpenRequested(QString)), this, SLOT(fileOpen(QString))); - // Registers - QAbstractItemView *registerView = - qobject_cast<QAbstractItemView *>(d->m_registerWindow); - d->m_registerHandler = new RegisterHandler; - registerView->setModel(d->m_registerHandler->model()); - - // Return Value d->m_watchHandler = new WatchHandler(this); QTreeView *returnView = qobject_cast<QTreeView *>(d->m_returnWindow); @@ -712,6 +698,11 @@ void DebuggerManager::clearCppCodeModelSnapshot() d->m_codeModelSnapshot = CPlusPlus::Snapshot(); } +QAbstractItemView *DebuggerManager::registerWindow() const +{ + return d->m_registerWindow; +} + QAbstractItemView *DebuggerManager::modulesWindow() const { return d->m_modulesWindow; @@ -833,7 +824,7 @@ void DebuggerManager::notifyInferiorPidChanged(qint64 pid) void DebuggerManager::aboutToShutdown() { - // TODO: STATE_DEBUG(d->m_engine); + STATE_DEBUG(d->m_engine); if (d->m_engine) d->m_engine->shutdown(); d->m_engine = 0; @@ -1088,7 +1079,6 @@ void DebuggerManager::cleanupViews() stackHandler()->removeAll(); threadsHandler()->removeAll(); watchHandler()->cleanup(); - registerHandler()->removeAll(); d->m_sourceFilesWindow->removeAll(); d->m_disassemblerViewAgent.cleanup(); d->m_actions.reverseDirectionAction->setChecked(false); @@ -1936,7 +1926,7 @@ void DebuggerManager::openTextEditor(const QString &titlePattern, DebuggerRunControl *DebuggerManager::runControl() const { - return const_cast<DebuggerRunControl *>(d->m_runControl); + return d->m_runControl; } DebuggerOutputWindow *DebuggerManager::debuggerOutputWindow() const @@ -1949,11 +1939,6 @@ BreakHandler *DebuggerManager::breakHandler() const return d->m_breakHandler; } -RegisterHandler *DebuggerManager::registerHandler() const -{ - return d->m_registerHandler; -} - StackHandler *DebuggerManager::stackHandler() const { return d->m_stackHandler; @@ -1974,53 +1959,6 @@ SnapshotHandler *DebuggerManager::snapshotHandler() const return d->m_snapshotHandler; } -////////////////////////////////////////////////////////////////////// -// -// AbstractDebuggerEngine -// -////////////////////////////////////////////////////////////////////// - -/* -void IDebuggerEngine::showStatusMessage(const QString &msg, int timeout) -{ - m_manager->showStatusMessage(msg, timeout); -} -*/ - -DebuggerState IDebuggerEngine::state() const -{ - return m_manager->state(); -} - -void IDebuggerEngine::setState(DebuggerState state, bool forced) -{ - m_manager->setState(state, forced); -} - -bool IDebuggerEngine::debuggerActionsEnabled() const -{ - return m_manager->debuggerActionsEnabled(); -} - -void IDebuggerEngine::showModuleSymbols - (const QString &moduleName, const Symbols &symbols) -{ - QTreeWidget *w = new QTreeWidget; - w->setColumnCount(3); - w->setRootIsDecorated(false); - w->setAlternatingRowColors(true); - w->setSortingEnabled(true); - w->setHeaderLabels(QStringList() << tr("Symbol") << tr("Address") << tr("Code")); - w->setWindowTitle(tr("Symbols in \"%1\"").arg(moduleName)); - foreach (const Symbol &s, symbols) { - QTreeWidgetItem *it = new QTreeWidgetItem; - it->setData(0, Qt::DisplayRole, s.name); - it->setData(1, Qt::DisplayRole, s.address); - it->setData(2, Qt::DisplayRole, s.state); - w->addTopLevelItem(it); - } - manager()->createNewDock(w); -} ////////////////////////////////////////////////////////////////////// // // Testing diff --git a/src/plugins/debugger/debuggermanager.h b/src/plugins/debugger/debuggermanager.h index 5cd5f7d298333e15abb823a66eef1f6e3c2e6515..2e5157e0070f70579c027167d0bf61f693ff17b9 100644 --- a/src/plugins/debugger/debuggermanager.h +++ b/src/plugins/debugger/debuggermanager.h @@ -255,16 +255,17 @@ public slots: // FIXME friend class DebuggerRunControl; public: Internal::BreakHandler *breakHandler() const; - Internal::RegisterHandler *registerHandler() const; Internal::StackHandler *stackHandler() const; Internal::ThreadsHandler *threadsHandler() const; Internal::WatchHandler *watchHandler() const; Internal::SnapshotHandler *snapshotHandler() const; + Internal::DebuggerOutputWindow *debuggerOutputWindow() const; private: Internal::SourceFilesWindow *sourceFileWindow() const; QAbstractItemView *modulesWindow() const; + QAbstractItemView *registerWindow() const; QWidget *threadsWindow() const; Internal::DebuggerManagerActions debuggerManagerActions() const; diff --git a/src/plugins/debugger/debuggerrunner.cpp b/src/plugins/debugger/debuggerrunner.cpp index a5884daeb54dc6de243bfa9e8a3548b21d4ffede..58a583f2295a710b4639cd60143c829e73b48986 100644 --- a/src/plugins/debugger/debuggerrunner.cpp +++ b/src/plugins/debugger/debuggerrunner.cpp @@ -32,7 +32,15 @@ #include "debuggeroutputwindow.h" #include "idebuggerengine.h" + +#include "breakhandler.h" #include "moduleshandler.h" +#include "registerhandler.h" +#include "snapshothandler.h" +#include "stackhandler.h" +#include "stackframe.h" +#include "threadshandler.h" +#include "watchhandler.h" #include <projectexplorer/debugginghelper.h> #include <projectexplorer/environment.h> @@ -51,6 +59,7 @@ #include <QtGui/QAbstractItemView> #include <QtGui/QTextDocument> +#include <QtGui/QTreeWidget> using namespace ProjectExplorer; using namespace Debugger::Internal; @@ -159,10 +168,10 @@ public: bool m_running; ModulesHandler *m_modulesHandler; + RegisterHandler *m_registerHandler; /* // FIXME: Move from DebuggerManager BreakHandler *m_breakHandler; - RegisterHandler *m_registerHandler; SnapshotHandler *m_snapshotHandler; StackHandler *m_stackHandler; ThreadsHandler *m_threadsHandler; @@ -180,12 +189,14 @@ DebuggerRunControl::Private::Private(DebuggerRunControl *parent, { m_running = false; m_modulesHandler = new ModulesHandler(q); + m_registerHandler = new RegisterHandler(); } DebuggerRunControl::Private::~Private() { #define doDelete(ptr) delete ptr; ptr = 0 doDelete(m_modulesHandler); + doDelete(m_registerHandler); #undef doDelete } @@ -326,7 +337,7 @@ BreakHandler *DebuggerRunControl::breakHandler() const RegisterHandler *DebuggerRunControl::registerHandler() const { - return d->m_manager->registerHandler(); + return d->m_registerHandler; } StackHandler *DebuggerRunControl::stackHandler() const @@ -365,7 +376,92 @@ void DebuggerRunControl::startDebugger(IDebuggerEngine *engine) d->m_engine = engine; d->m_engine->setRunControl(this); d->m_manager->modulesWindow()->setModel(d->m_modulesHandler->model()); + d->m_manager->registerWindow()->setModel(d->m_registerHandler->model()); d->m_engine->startDebugger(); } + +////////////////////////////////////////////////////////////////////// +// +// AbstractDebuggerEngine +// +////////////////////////////////////////////////////////////////////// + +/* +void IDebuggerEngine::showStatusMessage(const QString &msg, int timeout) +{ + m_manager->showStatusMessage(msg, timeout); +} +*/ + +DebuggerState IDebuggerEngine::state() const +{ + return m_manager->state(); +} + +void IDebuggerEngine::setState(DebuggerState state, bool forced) +{ + m_manager->setState(state, forced); +} + +bool IDebuggerEngine::debuggerActionsEnabled() const +{ + return m_manager->debuggerActionsEnabled(); +} + +void IDebuggerEngine::showModuleSymbols + (const QString &moduleName, const Symbols &symbols) +{ + QTreeWidget *w = new QTreeWidget; + w->setColumnCount(3); + w->setRootIsDecorated(false); + w->setAlternatingRowColors(true); + w->setSortingEnabled(true); + w->setHeaderLabels(QStringList() << tr("Symbol") << tr("Address") << tr("Code")); + w->setWindowTitle(tr("Symbols in \"%1\"").arg(moduleName)); + foreach (const Symbol &s, symbols) { + QTreeWidgetItem *it = new QTreeWidgetItem; + it->setData(0, Qt::DisplayRole, s.name); + it->setData(1, Qt::DisplayRole, s.address); + it->setData(2, Qt::DisplayRole, s.state); + w->addTopLevelItem(it); + } + manager()->createNewDock(w); +} + +ModulesHandler *IDebuggerEngine::modulesHandler() const +{ + return runControl()->modulesHandler(); +} + +BreakHandler *IDebuggerEngine::breakHandler() const +{ + return runControl()->breakHandler(); +} + +RegisterHandler *IDebuggerEngine::registerHandler() const +{ + return runControl()->registerHandler(); +} + +StackHandler *IDebuggerEngine::stackHandler() const +{ + return runControl()->stackHandler(); +} + +ThreadsHandler *IDebuggerEngine::threadsHandler() const +{ + return runControl()->threadsHandler(); +} + +WatchHandler *IDebuggerEngine::watchHandler() const +{ + return runControl()->watchHandler(); +} + +SnapshotHandler *IDebuggerEngine::snapshotHandler() const +{ + return runControl()->snapshotHandler(); +} + } // namespace Debugger diff --git a/src/plugins/debugger/gdb/gdbengine.cpp b/src/plugins/debugger/gdb/gdbengine.cpp index 834f19c22076c9dabd47b8fef3e36749b02dbcea..86374443af22dd32c7445c91cf98c27b764b7145 100644 --- a/src/plugins/debugger/gdb/gdbengine.cpp +++ b/src/plugins/debugger/gdb/gdbengine.cpp @@ -488,10 +488,9 @@ void GdbEngine::handleResponse(const QByteArray &buff) // line="1584",shlib="/../libFoo_debug.dylib",times="0"} const GdbMi bkpt = result.findChild("bkpt"); const int number = bkpt.findChild("number").data().toInt(); - BreakHandler *handler = manager()->breakHandler(); - BreakpointData *data = handler->findBreakpointByNumber(number); + BreakpointData *data = breakHandler()->findBreakpointByNumber(number); setBreakpointDataFromOutput(data, bkpt); - handler->updateMarkers(); + breakHandler()->updateMarkers(); } else { qDebug() << "IGNORED ASYNC OUTPUT" << asyncClass << result.toString(); @@ -876,7 +875,7 @@ void GdbEngine::commandTimeout() if (mb->exec() == QMessageBox::Ok) { showMessage(_("KILLING DEBUGGER AS REQUESTED BY USER")); // This is an undefined state, so we just pull the emergency brake. - manager()->watchHandler()->endCycle(); + watchHandler()->endCycle(); gdbProc()->kill(); } else { showMessage(_("CONTINUE DEBUGGER AS REQUESTED BY USER")); @@ -972,7 +971,7 @@ void GdbEngine::handleResultRecord(GdbResponse *response) GdbResultDone)) { #ifdef Q_OS_WIN // Ignore spurious 'running' responses to 'attach' - const bool warning = !(manager()->runControl()->sp().startMode == AttachExternal + const bool warning = !(runControl()->sp().startMode == AttachExternal && cmd.command.startsWith("attach")); #else const bool warning = true; @@ -1399,8 +1398,7 @@ void GdbEngine::handleStop1(const GdbMi &data) } else { // Older gdb versions do not produce "library loaded" messages // so the breakpoint update is not triggered. - if (m_gdbVersion < 70000 && !m_isMacGdb - && manager()->breakHandler()->size() > 0) + if (m_gdbVersion < 70000 && !m_isMacGdb && breakHandler()->size() > 0) reloadBreakListInternal(); } @@ -1467,7 +1465,7 @@ void GdbEngine::handleStop1(const GdbMi &data) // // Stack // - manager()->stackHandler()->setCurrentIndex(0); + stackHandler()->setCurrentIndex(0); updateLocals(qVariantFromValue(frame)); // Quick shot reloadStack(false); @@ -1713,7 +1711,7 @@ void GdbEngine::abortDebugger() // called from the manager int GdbEngine::currentFrame() const { - return manager()->stackHandler()->currentIndex(); + return stackHandler()->currentIndex(); } static inline QString msgNoBinaryForToolChain(int tc) @@ -1838,9 +1836,8 @@ void GdbEngine::executeStep() setTokenBarrier(); setState(InferiorRunningRequested); showStatusMessage(tr("Step requested..."), 5000); - StackHandler *stackHandler = manager()->stackHandler(); - if (m_gdbAdapter->isTrkAdapter() && stackHandler->stackSize() > 0) - postCommand("sal step," + stackHandler->topAddress().toLatin1()); + if (m_gdbAdapter->isTrkAdapter() && stackHandler()->stackSize() > 0) + postCommand("sal step," + stackHandler()->topAddress().toLatin1()); if (manager()->isReverseDebugging()) postCommand("reverse-step", RunRequest, CB(handleExecuteStep)); else @@ -1902,9 +1899,8 @@ void GdbEngine::executeNext() setTokenBarrier(); setState(InferiorRunningRequested); showStatusMessage(tr("Step next requested..."), 5000); - StackHandler *stackHandler = manager()->stackHandler(); - if (m_gdbAdapter->isTrkAdapter() && stackHandler->stackSize() > 0) - postCommand("sal next," + stackHandler->topAddress().toLatin1()); + if (m_gdbAdapter->isTrkAdapter() && stackHandler()->stackSize() > 0) + postCommand("sal next," + stackHandler()->topAddress().toLatin1()); if (manager()->isReverseDebugging()) postCommand("reverse-next", RunRequest, CB(handleExecuteNext)); else @@ -2159,7 +2155,7 @@ QByteArray GdbEngine::breakpointLocation(const BreakpointData *data) void GdbEngine::sendInsertBreakpoint(int index) { - const BreakpointData *data = manager()->breakHandler()->at(index); + const BreakpointData *data = breakHandler()->at(index); // Set up fallback in case of pending breakpoints which aren't handled // by the MI interface. if (data->type == BreakpointData::WatchpointType) { @@ -2200,9 +2196,9 @@ void GdbEngine::handleWatchInsert(const GdbResponse &response) QByteArray ba = response.data.findChild("consolestreamoutput").data(); if (ba.startsWith("Hardware watchpoint ")) { const int pos = ba.indexOf(':', 20); - BreakpointData *data = manager()->breakHandler()->at(index); + BreakpointData *data = breakHandler()->at(index); data->bpNumber = ba.mid(20, pos - 20); - manager()->breakHandler()->updateMarkers(); + breakHandler()->updateMarkers(); } else { showMessage(_("CANNOT PARSE WATCHPOINT FROM" + ba)); } @@ -2212,7 +2208,7 @@ void GdbEngine::handleWatchInsert(const GdbResponse &response) void GdbEngine::handleBreakInsert1(const GdbResponse &response) { int index = response.cookie.toInt(); - BreakpointData *data = manager()->breakHandler()->at(index); + BreakpointData *data = breakHandler()->at(index); if (response.resultClass == GdbResultDone) { // Interesting only on Mac? GdbMi bkpt = response.data.findChild("bkpt"); @@ -2285,11 +2281,10 @@ void GdbEngine::handleBreakList(const GdbMi &table) //qDebug() << "LEFT" << bkpts.size() << "BREAKPOINTS"; } - BreakHandler *handler = manager()->breakHandler(); foreach (const GdbMi &bkpt, bkpts) { BreakpointData temp; setBreakpointDataFromOutput(&temp, bkpt); - BreakpointData *data = handler->findSimilarBreakpoint(temp); + BreakpointData *data = breakHandler()->findSimilarBreakpoint(temp); //qDebug() << "\n\nGOT: " << bkpt.toString() << '\n' << temp.toString(); if (data) { //qDebug() << " FROM: " << data->toString(); @@ -2306,9 +2301,8 @@ void GdbEngine::handleBreakList(const GdbMi &table) void GdbEngine::handleBreakDisable(const GdbResponse &response) { - BreakHandler *handler = manager()->breakHandler(); if (response.resultClass == GdbResultDone) { - handler->updateMarkers(); + breakHandler()->updateMarkers(); } } @@ -2325,8 +2319,7 @@ void GdbEngine::handleBreakIgnore(const GdbResponse &response) // 29^done // // gdb 6.3 does not produce any console output - BreakHandler *handler = manager()->breakHandler(); - BreakpointData *data = handler->findBreakpointByNumber(bpNumber); + BreakpointData *data = breakHandler()->findBreakpointByNumber(bpNumber); if (response.resultClass == GdbResultDone && data) { QString msg = _(response.data.findChild("consolestreamoutput").data()); //if (msg.contains(__("Will stop next time breakpoint"))) { @@ -2336,15 +2329,14 @@ void GdbEngine::handleBreakIgnore(const GdbResponse &response) //} // FIXME: this assumes it is doing the right thing... data->bpIgnoreCount = data->ignoreCount; - handler->updateMarkers(); + breakHandler()->updateMarkers(); } } void GdbEngine::handleBreakCondition(const GdbResponse &response) { int bpNumber = response.cookie.toInt(); - BreakHandler *handler = manager()->breakHandler(); - BreakpointData *data = handler->findBreakpointByNumber(bpNumber); + BreakpointData *data = breakHandler()->findBreakpointByNumber(bpNumber); if (response.resultClass == GdbResultDone) { // We just assume it was successful. Otherwise we had to parse // the output stream data. @@ -2359,7 +2351,7 @@ void GdbEngine::handleBreakCondition(const GdbResponse &response) data->bpCondition = data->condition; } } - handler->updateMarkers(); + breakHandler()->updateMarkers(); } void GdbEngine::extractDataFromInfoBreak(const QString &output, BreakpointData *data) @@ -2426,8 +2418,7 @@ void GdbEngine::handleBreakInfo(const GdbResponse &response) // Old-style output for multiple breakpoints, presumably in a // constructor. const int bpNumber = response.cookie.toInt(); - const BreakHandler *handler = manager()->breakHandler(); - BreakpointData *data = handler->findBreakpointByNumber(bpNumber); + BreakpointData *data = breakHandler()->findBreakpointByNumber(bpNumber); if (data) { QString str = QString::fromLocal8Bit( response.data.findChild("consolestreamoutput").data()); @@ -2443,8 +2434,7 @@ void GdbEngine::handleInfoLine(const GdbResponse &response) // at address 0x80526aa <_Z10...+131> and ends at 0x80526b5 // <_Z10testQStackv+142>.\n" const int bpNumber = response.cookie.toInt(); - const BreakHandler *handler = manager()->breakHandler(); - BreakpointData *data = handler->findBreakpointByNumber(bpNumber); + BreakpointData *data = breakHandler()->findBreakpointByNumber(bpNumber); if (!data) return; QByteArray ba = response.data.findChild("consolestreamoutput").data(); @@ -2506,7 +2496,7 @@ void GdbEngine::attemptBreakpointSynchronization() return; } - BreakHandler *handler = manager()->breakHandler(); + BreakHandler *handler = breakHandler(); foreach (BreakpointData *data, handler->takeDisabledBreakpoints()) { QByteArray bpNumber = data->bpNumber; @@ -2753,10 +2743,8 @@ void GdbEngine::reloadSourceFilesInternal() void GdbEngine::selectThread(int index) { - ThreadsHandler *threadsHandler = manager()->threadsHandler(); - threadsHandler->setCurrentThread(index); - - QList<ThreadData> threads = threadsHandler->threads(); + threadsHandler()->setCurrentThread(index); + QList<ThreadData> threads = threadsHandler()->threads(); QTC_ASSERT(index < threads.size(), return); int id = threads.at(index).id; showStatusMessage(tr("Retrieving data for stack view..."), 10000); @@ -2871,7 +2859,7 @@ void GdbEngine::handleStackListFrames(const GdbResponse &response) bool canExpand = !cookie.isFull && (n >= theDebuggerAction(MaximalStackDepth)->value().toInt()); theDebuggerAction(ExpandStack)->setEnabled(canExpand); - manager()->stackHandler()->setFrames(stackFrames, canExpand); + stackHandler()->setFrames(stackFrames, canExpand); // We can't jump to any file if we don't have any frames. if (stackFrames.isEmpty()) @@ -2895,7 +2883,7 @@ void GdbEngine::handleStackListFrames(const GdbResponse &response) // when reading the *stopped message. bool jump = (m_isMacGdb || targetFrame != 0); - manager()->stackHandler()->setCurrentIndex(targetFrame); + stackHandler()->setCurrentIndex(targetFrame); if (jump || cookie.gotoLocation) activateFrame(targetFrame); } @@ -2906,25 +2894,25 @@ void GdbEngine::activateFrame(int frameIndex) if (state() != InferiorStopped && state() != InferiorUnrunnable) return; - StackHandler *stackHandler = manager()->stackHandler(); - int oldIndex = stackHandler->currentIndex(); + StackHandler *handler = stackHandler(); + int oldIndex = handler->currentIndex(); - if (frameIndex == stackHandler->stackSize()) { + if (frameIndex == handler->stackSize()) { reloadFullStack(); return; } - QTC_ASSERT(frameIndex < stackHandler->stackSize(), return); + QTC_ASSERT(frameIndex < handler->stackSize(), return); if (oldIndex != frameIndex) { // Assuming the command always succeeds this saves a roundtrip. // Otherwise the lines below would need to get triggered // after a response to this -stack-select-frame here. - stackHandler->setCurrentIndex(frameIndex); + handler->setCurrentIndex(frameIndex); postCommand("-stack-select-frame " + QByteArray::number(frameIndex), CB(handleStackSelectFrame)); } - gotoLocation(stackHandler->currentFrame(), true); + gotoLocation(handler->currentFrame(), true); } void GdbEngine::handleStackSelectFrame(const GdbResponse &response) @@ -2959,10 +2947,9 @@ void GdbEngine::handleThreadInfo(const GdbResponse &response) thread.lineNumber = frame.findChild("line").data().toInt(); threads.append(thread); } - ThreadsHandler *threadsHandler = manager()->threadsHandler(); - threadsHandler->setThreads(threads); + threadsHandler()->setThreads(threads); int currentIndex = response.data.findChild("current-thread-id").data().toInt(); - threadsHandler->setCurrentThread(currentIndex); + threadsHandler()->setCurrentThread(currentIndex); } else { // Fall back for older versions: Try to get at least a list // of running threads. @@ -2988,9 +2975,8 @@ void GdbEngine::handleThreadListIds(const GdbResponse &response) currentIndex = index; } } - ThreadsHandler *threadsHandler = manager()->threadsHandler(); - threadsHandler->setThreads(threads); - threadsHandler->setCurrentThread(currentIndex); + threadsHandler()->setThreads(threads); + threadsHandler()->setCurrentThread(currentIndex); } @@ -3021,8 +3007,8 @@ void GdbEngine::handleMakeSnapshot(const GdbResponse &response) SnapshotData snapshot; snapshot.setDate(QDateTime::currentDateTime()); snapshot.setLocation(response.cookie.toString()); - snapshot.setFrames(manager()->stackHandler()->frames()); - manager()->snapshotHandler()->appendSnapshot(snapshot); + snapshot.setFrames(stackHandler()->frames()); + snapshotHandler()->appendSnapshot(snapshot); } else { QByteArray msg = response.data.findChild("msg").data(); showMessageBox(QMessageBox::Critical, tr("Snapshot Creation Error"), @@ -3111,7 +3097,7 @@ void GdbEngine::reloadRegisters() void GdbEngine::setRegisterValue(int nr, const QString &value) { - Register reg = manager()->registerHandler()->registers().at(nr); + Register reg = runControl()->registerHandler()->registers().at(nr); //qDebug() << "NOT IMPLEMENTED: CHANGE REGISTER " << nr << reg.name << ":" // << value; postCommand("-var-delete \"R@\""); @@ -3134,7 +3120,7 @@ void GdbEngine::handleRegisterListNames(const GdbResponse &response) foreach (const GdbMi &item, response.data.findChild("register-names").children()) registers.append(Register(item.data())); - manager()->registerHandler()->setRegisters(registers); + runControl()->registerHandler()->setRegisters(registers); if (m_gdbAdapter->isTrkAdapter()) m_gdbAdapter->trkReloadRegisters(); @@ -3145,7 +3131,7 @@ void GdbEngine::handleRegisterListValues(const GdbResponse &response) if (response.resultClass != GdbResultDone) return; - Registers registers = manager()->registerHandler()->registers(); + Registers registers = runControl()->registerHandler()->registers(); // 24^done,register-values=[{number="0",value="0xf423f"},...] const GdbMi values = response.data.findChild("register-values"); @@ -3182,7 +3168,7 @@ void GdbEngine::handleRegisterListValues(const GdbResponse &response) reg.value = value; } } - manager()->registerHandler()->setRegisters(registers); + runControl()->registerHandler()->setRegisters(registers); } @@ -3211,8 +3197,7 @@ QPoint GdbEngine::m_toolTipPos; bool GdbEngine::showToolTip() { - WatchHandler *handler = manager()->watchHandler(); - WatchModel *model = handler->model(TooltipsWatch); + WatchModel *model = watchHandler()->model(TooltipsWatch); QByteArray iname = tooltipINameForExpression(m_toolTipExpression.toLatin1()); WatchItem *item = model->findItem(iname, model->rootItem()); if (!item) { @@ -3310,8 +3295,8 @@ void GdbEngine::setToolTipExpression(const QPoint &mousePos, toolTip.exp = exp.toLatin1(); toolTip.name = exp; toolTip.iname = tooltipINameForExpression(toolTip.exp); - manager()->watchHandler()->removeData(toolTip.iname); - manager()->watchHandler()->insertData(toolTip); + watchHandler()->removeData(toolTip.iname); + watchHandler()->insertData(toolTip); } @@ -3340,7 +3325,7 @@ bool GdbEngine::hasDebuggingHelperForType(const QString &type) const } if (theDebuggerBoolSetting(DebugDebuggingHelpers) - && manager()->stackHandler()->isDebuggingDebuggingHelpers()) + && stackHandler()->isDebuggingDebuggingHelpers()) return false; if (m_debuggingHelperState != DebuggingHelperAvailable) @@ -3426,7 +3411,7 @@ void GdbEngine::rebuildWatchModel() showMessage(currentTime(), LogMiscInput); showMessage(_("<Rebuild Watchmodel %1>").arg(count), LogMiscInput); showStatusMessage(tr("Finished retrieving data"), 400); - manager()->watchHandler()->endCycle(); + watchHandler()->endCycle(); showToolTip(); } @@ -3479,7 +3464,7 @@ void GdbEngine::handleVarCreate(const GdbResponse &response) if (response.resultClass == GdbResultDone) { data.variable = data.iname; setWatchDataType(data, response.data.findChild("type")); - if (manager()->watchHandler()->isExpandedIName(data.iname) + if (runControl()->watchHandler()->isExpandedIName(data.iname) && !response.data.findChild("children").isValid()) data.setChildrenNeeded(); else @@ -3608,7 +3593,7 @@ void GdbEngine::insertData(const WatchData &data0) qDebug() << "BOGUS VALUE:" << data.toString(); return; } - manager()->watchHandler()->insertData(data); + runControl()->watchHandler()->insertData(data); } void GdbEngine::assignValueInDebugger(const QString &expression, const QString &value) diff --git a/src/plugins/debugger/gdb/trkgdbadapter.cpp b/src/plugins/debugger/gdb/trkgdbadapter.cpp index ef3ae855555cf4f3e8d17563cea1742e7a258eae..a9bac0ee9df13c040b20db3addc174cec5621c82 100644 --- a/src/plugins/debugger/gdb/trkgdbadapter.cpp +++ b/src/plugins/debugger/gdb/trkgdbadapter.cpp @@ -2140,7 +2140,7 @@ void TrkGdbAdapter::trkReloadRegisters() { // Take advantage of direct access to cached register values. QTC_ASSERT(m_snapshot.registerValid, /**/); - RegisterHandler *handler = m_engine->manager()->registerHandler(); + RegisterHandler *handler = m_engine->runControl()->registerHandler(); Registers registers = handler->registers(); QTC_ASSERT(registers.size() >= 26, diff --git a/src/plugins/debugger/idebuggerengine.h b/src/plugins/debugger/idebuggerengine.h index 1bb2101c0048ab93bbc34e935fe38beaf62ff5e1..bd57373f8419dda21b1b0e6501979819ea42579f 100644 --- a/src/plugins/debugger/idebuggerengine.h +++ b/src/plugins/debugger/idebuggerengine.h @@ -61,6 +61,14 @@ class DisassemblerViewAgent; class MemoryViewAgent; class Symbol; class WatchData; +class BreakHandler; +class ModulesHandler; +class RegisterHandler; +class StackHandler; +class SnapshotHandler; +class ThreadsHandler; +class WatchHandler; + class IDebuggerEngine : public QObject { @@ -138,9 +146,18 @@ public slots: void showMessage(const QString &msg, int channel = LogDebug, int timeout = -1) const; void showStatusMessage(const QString &msg, int timeout = -1) const { showMessage(msg, StatusBar, timeout); } + +public: DebuggerManager *manager() const { return m_manager; } bool debuggerActionsEnabled() const; void showModuleSymbols(const QString &moduleName, const Symbols &symbols); + ModulesHandler *modulesHandler() const; + BreakHandler *breakHandler() const; + RegisterHandler *registerHandler() const; + StackHandler *stackHandler() const; + ThreadsHandler *threadsHandler() const; + WatchHandler *watchHandler() const; + SnapshotHandler *snapshotHandler() const; protected: DebuggerState state() const;