diff --git a/src/plugins/debugger/debuggermanager.cpp b/src/plugins/debugger/debuggermanager.cpp index 02494d42d332c7e989103970cfe7949d4d26d075..e12afc9c2d98ee3a96bf120966381b08a930a970 100644 --- a/src/plugins/debugger/debuggermanager.cpp +++ b/src/plugins/debugger/debuggermanager.cpp @@ -30,6 +30,7 @@ #include "debuggermanager.h" #include "debuggeractions.h" +#include "debuggeragents.h" #include "debuggerrunner.h" #include "debuggerconstants.h" #include "idebuggerengine.h" @@ -296,6 +297,7 @@ struct DebuggerManagerPrivate { bool m_busy; QTimer *m_statusTimer; QString m_lastPermanentStatusMessage; + DisassemblerViewAgent *m_disassemblerViewAgent; IDebuggerEngine *m_engine; DebuggerState m_state; @@ -303,10 +305,11 @@ struct DebuggerManagerPrivate { DebuggerManager *DebuggerManagerPrivate::instance = 0; -DebuggerManagerPrivate::DebuggerManagerPrivate() : - m_startParameters(new DebuggerStartParameters), - m_inferiorPid(0) +DebuggerManagerPrivate::DebuggerManagerPrivate() + : m_startParameters(new DebuggerStartParameters) { + m_inferiorPid = 0; + m_disassemblerViewAgent = 0; } DebuggerManager::DebuggerManager() : d(new DebuggerManagerPrivate) @@ -1338,17 +1341,30 @@ void DebuggerManager::resetLocation() void DebuggerManager::gotoLocation(const Debugger::Internal::StackFrame &frame, bool setMarker) { - // connected to the plugin - emit gotoLocationRequested(frame, setMarker); + if (theDebuggerBoolSetting(OperateByInstruction) || !frame.isUsable()) { + if (!d->m_disassemblerViewAgent) + d->m_disassemblerViewAgent = new DisassemblerViewAgent(this); + d->m_disassemblerViewAgent->setFrame(frame); + if (setMarker) + resetLocation(); + } else { + static QString lastFile; + static int lastLine; + if (frame.line != lastLine || frame.file != lastFile) { + lastLine = frame.line; + lastFile = frame.file; + // Connected to the plugin. + emit gotoLocationRequested(lastFile, lastLine, setMarker); + } + } } void DebuggerManager::fileOpen(const QString &fileName) { - // connected to the plugin StackFrame frame; frame.file = fileName; frame.line = -1; - emit gotoLocationRequested(frame, false); + gotoLocation(frame, false); } void DebuggerManager::operateByInstructionTriggered() diff --git a/src/plugins/debugger/debuggermanager.h b/src/plugins/debugger/debuggermanager.h index e38ed13dbd9d660f2289979fa52dcef9f17d5fbe..e6dde17f5ed0a009fbb277844d29318a459c663d 100644 --- a/src/plugins/debugger/debuggermanager.h +++ b/src/plugins/debugger/debuggermanager.h @@ -297,7 +297,7 @@ signals: void debugModeRequested(); void previousModeRequested(); void statusMessageRequested(const QString &msg, int timeout); // -1 for 'forever' - void gotoLocationRequested(const Debugger::Internal::StackFrame &frame, bool setLocationMarker); + void gotoLocationRequested(const QString &file, int line, bool setLocationMarker); void resetLocationRequested(); void currentTextEditorRequested(QString *fileName, int *lineNumber, QObject **ob); void sessionValueRequested(const QString &name, QVariant *value); diff --git a/src/plugins/debugger/debuggerplugin.cpp b/src/plugins/debugger/debuggerplugin.cpp index 191178eee2ea4229b5d413a82772a5374e8e8a8d..e8a71ee4df53f0470ae170d5d7a983c116676882 100644 --- a/src/plugins/debugger/debuggerplugin.cpp +++ b/src/plugins/debugger/debuggerplugin.cpp @@ -31,12 +31,10 @@ #include "breakhandler.h" #include "debuggeractions.h" -#include "debuggeragents.h" #include "debuggerdialogs.h" #include "debuggerconstants.h" #include "debuggermanager.h" #include "debuggerrunner.h" -#include "stackframe.h" #include "debuggerstringutils.h" #include "ui_commonoptionspage.h" @@ -420,7 +418,6 @@ DebuggerPlugin::DebuggerPlugin() : m_manager(0), m_debugMode(0), m_locationMark(0), - m_disassemblerViewAgent(0), m_gdbRunningContext(0), m_cmdLineEnabledEngines(AllEngineTypes), m_cmdLineAttachPid(0), @@ -888,8 +885,8 @@ bool DebuggerPlugin::initialize(const QStringList &arguments, QString *errorMess connect(m_manager, SIGNAL(resetLocationRequested()), this, SLOT(resetLocation())); - connect(m_manager, SIGNAL(gotoLocationRequested(Debugger::Internal::StackFrame,bool)), - this, SLOT(gotoLocation(Debugger::Internal::StackFrame,bool))); + connect(m_manager, SIGNAL(gotoLocationRequested(QString,int,bool)), + this, SLOT(gotoLocation(QString,int,bool))); connect(m_manager, SIGNAL(stateChanged(int)), this, SLOT(handleStateChanged(int))); connect(m_manager, SIGNAL(previousModeRequested()), @@ -1091,26 +1088,12 @@ void DebuggerPlugin::resetLocation() m_locationMark = 0; } -void DebuggerPlugin::gotoLocation(const Debugger::Internal::StackFrame &frame, bool setMarker) +void DebuggerPlugin::gotoLocation(const QString &file, int line, bool setMarker) { - if (theDebuggerBoolSetting(OperateByInstruction) || !frame.isUsable()) { - if (!m_disassemblerViewAgent) - m_disassemblerViewAgent = new DisassemblerViewAgent(m_manager); - m_disassemblerViewAgent->setFrame(frame); - if (setMarker) - resetLocation(); - } else { - static QString lastFile; - static int lastLine; - if (frame.line != lastLine || frame.file != lastFile) { - lastLine = frame.line; - lastFile = frame.file; - TextEditor::BaseTextEditor::openEditorAt(frame.file, frame.line); - if (setMarker) { - resetLocation(); - m_locationMark = new LocationMark(frame.file, frame.line); - } - } + TextEditor::BaseTextEditor::openEditorAt(file, line); + if (setMarker) { + resetLocation(); + m_locationMark = new LocationMark(file, line); } } diff --git a/src/plugins/debugger/debuggerplugin.h b/src/plugins/debugger/debuggerplugin.h index 007fbe0fd146e59bbb7d9b92a6cb4d8eaee7ffb4..dd5fea2efa7b44883477ee294f49934f2625be4e 100644 --- a/src/plugins/debugger/debuggerplugin.h +++ b/src/plugins/debugger/debuggerplugin.h @@ -62,8 +62,6 @@ namespace Internal { class BreakpointData; class DebuggerRunControlFactory; class DebugMode; -class DisassemblerViewAgent; -struct StackFrame; class DebuggerPlugin : public ExtensionSystem::IPlugin { @@ -97,7 +95,7 @@ private slots: int lineNumber, QMenu *menu); void resetLocation(); - void gotoLocation(const Debugger::Internal::StackFrame &frame, bool setMarker); + void gotoLocation(const QString &file, int line, bool setMarker); void breakpointSetRemoveMarginActionTriggered(); void breakpointEnableDisableMarginActionTriggered(); @@ -131,7 +129,6 @@ private: QString m_previousMode; TextEditor::BaseTextMark *m_locationMark; - DisassemblerViewAgent *m_disassemblerViewAgent; int m_gdbRunningContext; unsigned m_cmdLineEnabledEngines; quint64 m_cmdLineAttachPid;