From cfd2dbb3951667483e0c4bdd7626077fb2c78a46 Mon Sep 17 00:00:00 2001 From: hjk Date: Wed, 8 Dec 2010 12:43:11 +0100 Subject: [PATCH] debugger: split debuggeragents.{h,cpp} int {memory,disassembler}agent.{h,cpp} --- src/plugins/debugger/cdb/cdbengine.cpp | 5 +- src/plugins/debugger/cdb2/cdbengine2.cpp | 3 +- src/plugins/debugger/debugger.pro | 6 +- src/plugins/debugger/debuggerengine.cpp | 14 +- src/plugins/debugger/debuggerengine.h | 2 + src/plugins/debugger/debuggerplugin.cpp | 4 +- .../{debuggeragents.cpp => disassembleragent.cpp} | 133 +---------------- .../{debuggeragents.h => disassembleragent.h} | 42 +----- src/plugins/debugger/gdb/gdbengine.cpp | 26 ++-- src/plugins/debugger/lldb/ipcenginehost.cpp | 7 +- src/plugins/debugger/lldb/lldbenginehost.cpp | 6 +- src/plugins/debugger/memoryagent.cpp | 159 +++++++++++++++++++++ src/plugins/debugger/memoryagent.h | 75 ++++++++++ src/plugins/debugger/registerwindow.cpp | 3 +- src/plugins/debugger/stackhandler.cpp | 1 - src/plugins/debugger/stackwindow.cpp | 9 +- src/plugins/debugger/watchhandler.cpp | 1 - src/plugins/debugger/watchwindow.cpp | 7 +- 18 files changed, 296 insertions(+), 207 deletions(-) rename src/plugins/debugger/{debuggeragents.cpp => disassembleragent.cpp} (68%) rename src/plugins/debugger/{debuggeragents.h => disassembleragent.h} (69%) create mode 100644 src/plugins/debugger/memoryagent.cpp create mode 100644 src/plugins/debugger/memoryagent.h diff --git a/src/plugins/debugger/cdb/cdbengine.cpp b/src/plugins/debugger/cdb/cdbengine.cpp index 25df9ee582..2a0ee37ed6 100644 --- a/src/plugins/debugger/cdb/cdbengine.cpp +++ b/src/plugins/debugger/cdb/cdbengine.cpp @@ -40,9 +40,10 @@ #include "cdboptions.h" #include "cdbexceptionutils.h" #include "cdbsymbolpathlisteditor.h" -#include "debuggeragents.h" -#include "debuggercore.h" #include "dbgwinutils.h" +#include "debuggercore.h" +#include "disassemblerviewagent.h" +#include "memoryviewagent.h" #include "debuggeractions.h" #include "breakhandler.h" diff --git a/src/plugins/debugger/cdb2/cdbengine2.cpp b/src/plugins/debugger/cdb2/cdbengine2.cpp index 6f034a681c..f6191cdee8 100644 --- a/src/plugins/debugger/cdb2/cdbengine2.cpp +++ b/src/plugins/debugger/cdb2/cdbengine2.cpp @@ -40,7 +40,8 @@ #include "debuggeractions.h" #include "debuggercore.h" #include "registerhandler.h" -#include "debuggeragents.h" +#include "disassembleragent.h" +#include "memoryagent.h" #include "debuggertooltip.h" #include "cdbparsehelpers.h" #include "watchutils.h" diff --git a/src/plugins/debugger/debugger.pro b/src/plugins/debugger/debugger.pro index 4cc62852ee..0497ed9089 100644 --- a/src/plugins/debugger/debugger.pro +++ b/src/plugins/debugger/debugger.pro @@ -23,7 +23,6 @@ HEADERS += breakhandler.h \ consolewindow.h \ debugger_global.h \ debuggeractions.h \ - debuggeragents.h \ debuggercore.h \ debuggerconstants.h \ debuggerdialogs.h \ @@ -34,8 +33,10 @@ HEADERS += breakhandler.h \ debuggerstreamops.h \ debuggerstringutils.h \ debuggertooltip.h \ + disassembleragent.h \ disassemblerlines.h \ logwindow.h \ + memoryagent.h \ moduleshandler.h \ moduleswindow.h \ name_demangler.h \ @@ -65,7 +66,6 @@ SOURCES += breakhandler.cpp \ breakwindow.cpp \ consolewindow.cpp \ debuggeractions.cpp \ - debuggeragents.cpp \ debuggerdialogs.cpp \ debuggerengine.cpp \ debuggermainwindow.cpp \ @@ -73,8 +73,10 @@ SOURCES += breakhandler.cpp \ debuggerrunner.cpp \ debuggerstreamops.cpp \ debuggertooltip.cpp \ + disassembleragent.cpp \ disassemblerlines.cpp \ logwindow.cpp \ + memoryagent.cpp \ moduleshandler.cpp \ moduleswindow.cpp \ name_demangler.cpp \ diff --git a/src/plugins/debugger/debuggerengine.cpp b/src/plugins/debugger/debuggerengine.cpp index 45a266ddca..db42229221 100644 --- a/src/plugins/debugger/debuggerengine.cpp +++ b/src/plugins/debugger/debuggerengine.cpp @@ -30,13 +30,14 @@ #include "debuggerengine.h" #include "debuggeractions.h" -#include "debuggeragents.h" #include "debuggercore.h" #include "debuggerplugin.h" #include "debuggerrunner.h" #include "debuggerstringutils.h" #include "debuggertooltip.h" +#include "memoryagent.h" +#include "disassembleragent.h" #include "breakhandler.h" #include "moduleshandler.h" #include "registerhandler.h" @@ -1418,6 +1419,17 @@ bool DebuggerEngine::isCppBreakpoint(const BreakpointParameters &p) && !p.fileName.endsWith(QLatin1String(".js"), Qt::CaseInsensitive); } +void DebuggerEngine::openMemoryView(quint64 address) +{ + (void) new MemoryViewAgent(this, address); +} + +void DebuggerEngine::openDisassemblerView(const StackFrame &frame) +{ + DisassemblerViewAgent *agent = new DisassemblerViewAgent(this); + agent->setFrame(frame, true, false); +} + } // namespace Debugger #include "debuggerengine.moc" diff --git a/src/plugins/debugger/debuggerengine.h b/src/plugins/debugger/debuggerengine.h index 3723ce9e3c..2cacceb08c 100644 --- a/src/plugins/debugger/debuggerengine.h +++ b/src/plugins/debugger/debuggerengine.h @@ -160,8 +160,10 @@ public: void startDebugger(DebuggerRunControl *runControl); virtual void watchPoint(const QPoint &); + virtual void openMemoryView(quint64 addr); virtual void fetchMemory(Internal::MemoryViewAgent *, QObject *, quint64 addr, quint64 length); + virtual void openDisassemblerView(const Internal::StackFrame &frame); virtual void fetchDisassembler(Internal::DisassemblerViewAgent *); virtual void activateFrame(int index); diff --git a/src/plugins/debugger/debuggerplugin.cpp b/src/plugins/debugger/debuggerplugin.cpp index c990d1bf7a..8980634d1d 100644 --- a/src/plugins/debugger/debuggerplugin.cpp +++ b/src/plugins/debugger/debuggerplugin.cpp @@ -30,7 +30,6 @@ #include "debuggerplugin.h" #include "debuggeractions.h" -#include "debuggeragents.h" #include "debuggerconstants.h" #include "debuggercore.h" #include "debuggerdialogs.h" @@ -44,6 +43,7 @@ #include "breakhandler.h" #include "breakwindow.h" #include "consolewindow.h" +#include "disassembleragent.h" #include "logwindow.h" #include "moduleswindow.h" #include "registerwindow.h" @@ -2430,7 +2430,7 @@ void DebuggerPluginPrivate::openMemoryEditor() { AddressDialog dialog; if (dialog.exec() == QDialog::Accepted) - (void) new MemoryViewAgent(currentEngine(), dialog.address()); + currentEngine()->openMemoryView(dialog.address()); } void DebuggerPluginPrivate::coreShutdown() diff --git a/src/plugins/debugger/debuggeragents.cpp b/src/plugins/debugger/disassembleragent.cpp similarity index 68% rename from src/plugins/debugger/debuggeragents.cpp rename to src/plugins/debugger/disassembleragent.cpp index 8864236650..c93e6d0f84 100644 --- a/src/plugins/debugger/debuggeragents.cpp +++ b/src/plugins/debugger/disassembleragent.cpp @@ -27,7 +27,7 @@ ** **************************************************************************/ -#include "debuggeragents.h" +#include "disassembleragent.h" #include "breakhandler.h" #include "debuggerengine.h" @@ -36,10 +36,9 @@ #include "stackframe.h" #include -#include #include -#include #include +#include #include #include @@ -49,17 +48,9 @@ #include -#include -#include -#include - -#include -#include #include -#include #include -#include using namespace Core; @@ -68,126 +59,6 @@ namespace Internal { /////////////////////////////////////////////////////////////////////// // -// MemoryViewAgent -// -/////////////////////////////////////////////////////////////////////// - -/*! - \class MemoryViewAgent - - Objects form this class are created in response to user actions in - the Gui for showing raw memory from the inferior. After creation - it handles communication between the engine and the bineditor. -*/ - -namespace { const int DataRange = 1024 * 1024; } - -MemoryViewAgent::MemoryViewAgent(Debugger::DebuggerEngine *engine, quint64 addr) - : QObject(engine), m_engine(engine) -{ - QTC_ASSERT(engine, /**/); - createBinEditor(addr); -} - -MemoryViewAgent::MemoryViewAgent(Debugger::DebuggerEngine *engine, const QString &addr) - : QObject(engine), m_engine(engine) -{ - QTC_ASSERT(engine, /**/); - bool ok = true; - createBinEditor(addr.toULongLong(&ok, 0)); - //qDebug() << " ADDRESS: " << addr << addr.toUInt(&ok, 0); -} - -MemoryViewAgent::~MemoryViewAgent() -{ - EditorManager *editorManager = EditorManager::instance(); - QList editors; - foreach (QPointer editor, m_editors) - if (editor) - editors.append(editor.data()); - editorManager->closeEditors(editors); -} - -void MemoryViewAgent::createBinEditor(quint64 addr) -{ - EditorManager *editorManager = EditorManager::instance(); - QString titlePattern = tr("Memory $"); - IEditor *editor = editorManager->openEditorWithContents( - Core::Constants::K_DEFAULT_BINARY_EDITOR_ID, - &titlePattern); - if (editor) { - connect(editor->widget(), - SIGNAL(lazyDataRequested(Core::IEditor *, quint64,bool)), - SLOT(fetchLazyData(Core::IEditor *, quint64,bool))); - connect(editor->widget(), - SIGNAL(newWindowRequested(quint64)), - SLOT(createBinEditor(quint64))); - connect(editor->widget(), - SIGNAL(newRangeRequested(Core::IEditor *, quint64)), - SLOT(provideNewRange(Core::IEditor*,quint64))); - connect(editor->widget(), - SIGNAL(startOfFileRequested(Core::IEditor *)), - SLOT(handleStartOfFileRequested(Core::IEditor*))); - connect(editor->widget(), - SIGNAL(endOfFileRequested(Core::IEditor *)), - SLOT(handleEndOfFileRequested(Core::IEditor*))); - m_editors << editor; - editorManager->activateEditor(editor); - QMetaObject::invokeMethod(editor->widget(), "setNewWindowRequestAllowed"); - QMetaObject::invokeMethod(editor->widget(), "setLazyData", - Q_ARG(quint64, addr), Q_ARG(int, DataRange), Q_ARG(int, BinBlockSize)); - } else { - showMessageBox(QMessageBox::Warning, - tr("No memory viewer available"), - tr("The memory contents cannot be shown as no viewer plugin " - "for binary data has been loaded.")); - deleteLater(); - } -} - -void MemoryViewAgent::fetchLazyData(IEditor *editor, quint64 block, bool sync) -{ - Q_UNUSED(sync); // FIXME: needed support for incremental searching - m_engine->fetchMemory(this, editor, BinBlockSize * block, BinBlockSize); -} - -void MemoryViewAgent::addLazyData(QObject *editorToken, quint64 addr, - const QByteArray &ba) -{ - IEditor *editor = qobject_cast(editorToken); - if (editor && editor->widget()) { - Core::EditorManager::instance()->activateEditor(editor); - QMetaObject::invokeMethod(editor->widget(), "addLazyData", - Q_ARG(quint64, addr / BinBlockSize), Q_ARG(QByteArray, ba)); - } -} - -void MemoryViewAgent::provideNewRange(IEditor *editor, quint64 address) -{ - QMetaObject::invokeMethod(editor->widget(), "setLazyData", - Q_ARG(quint64, address), Q_ARG(int, DataRange), - Q_ARG(int, BinBlockSize)); -} - -// Since we are not dealing with files, we take these signals to mean -// "move to start/end of range". This seems to make more sense than -// jumping to the start or end of the address space, respectively. -void MemoryViewAgent::handleStartOfFileRequested(IEditor *editor) -{ - QMetaObject::invokeMethod(editor->widget(), - "setCursorPosition", Q_ARG(int, 0)); -} - -void MemoryViewAgent::handleEndOfFileRequested(IEditor *editor) -{ - QMetaObject::invokeMethod(editor->widget(), - "setCursorPosition", Q_ARG(int, DataRange - 1)); -} - - - -/////////////////////////////////////////////////////////////////////// -// // DisassemblerViewAgent // /////////////////////////////////////////////////////////////////////// diff --git a/src/plugins/debugger/debuggeragents.h b/src/plugins/debugger/disassembleragent.h similarity index 69% rename from src/plugins/debugger/debuggeragents.h rename to src/plugins/debugger/disassembleragent.h index e7217640f5..4fb6879fc8 100644 --- a/src/plugins/debugger/debuggeragents.h +++ b/src/plugins/debugger/disassembleragent.h @@ -27,15 +27,13 @@ ** **************************************************************************/ -#ifndef DEBUGGER_AGENTS_H -#define DEBUGGER_AGENTS_H +#ifndef DEBUGGER_DISASSEMBLERAGENT_H +#define DEBUGGER_DISASSEMBLERAGENT_H + +#include "disassemblerlines.h" #include -#include #include -#include - -#include "disassemblerlines.h" namespace Core { class IEditor; @@ -51,40 +49,13 @@ class StackFrame; class DisassemblerViewAgent; class DisassemblerViewAgentPrivate; -class MemoryViewAgent : public QObject -{ - Q_OBJECT - -public: - // Called from Gui - explicit MemoryViewAgent(Debugger::DebuggerEngine *engine, quint64 startaddr); - explicit MemoryViewAgent(Debugger::DebuggerEngine *engine, const QString &startaddr); - ~MemoryViewAgent(); - - enum { BinBlockSize = 1024 }; - -public slots: - // Called from Engine - void addLazyData(QObject *editorToken, quint64 addr, const QByteArray &data); - -private: - Q_SLOT void createBinEditor(quint64 startAddr); - Q_SLOT void fetchLazyData(Core::IEditor *, quint64 block, bool sync); - Q_SLOT void provideNewRange(Core::IEditor *editor, quint64 address); - Q_SLOT void handleStartOfFileRequested(Core::IEditor *editor); - Q_SLOT void handleEndOfFileRequested(Core::IEditor *editor); - - QList > m_editors; - QPointer m_engine; -}; - class DisassemblerViewAgent : public QObject { Q_OBJECT Q_PROPERTY(QString mimeType READ mimeType WRITE setMimeType) public: // Called from Gui - explicit DisassemblerViewAgent(Debugger::DebuggerEngine *engine); + explicit DisassemblerViewAgent(DebuggerEngine *engine); ~DisassemblerViewAgent(); void setFrame(const StackFrame &frame, bool tryMixed, bool setMarker); @@ -105,6 +76,7 @@ public: // Return address of an assembly line "0x0dfd bla" static quint64 addressFromDisassemblyLine(const QString &data); + private: DisassemblerViewAgentPrivate *d; }; @@ -113,4 +85,4 @@ private: } // namespace Internal } // namespace Debugger -#endif // DEBUGGER_WATCHWINDOW_H +#endif // DEBUGGER_DISASSEMBLERAGENT_H diff --git a/src/plugins/debugger/gdb/gdbengine.cpp b/src/plugins/debugger/gdb/gdbengine.cpp index c0e871a52c..1e6e1691fb 100644 --- a/src/plugins/debugger/gdb/gdbengine.cpp +++ b/src/plugins/debugger/gdb/gdbengine.cpp @@ -31,11 +31,6 @@ #include "gdbengine.h" -#include "gdboptionspage.h" -#include "debuggercore.h" -#include "debuggerplugin.h" -#include "debuggerrunner.h" - #include "attachgdbadapter.h" #include "coregdbadapter.h" #include "localplaingdbadapter.h" @@ -45,13 +40,18 @@ #include "trkgdbadapter.h" #include "tcftrkgdbadapter.h" -#include "watchutils.h" #include "debuggeractions.h" -#include "debuggeragents.h" #include "debuggerconstants.h" -#include "debuggertooltip.h" +#include "debuggercore.h" +#include "debuggerplugin.h" +#include "debuggerrunner.h" #include "debuggerstringutils.h" +#include "debuggertooltip.h" +#include "disassembleragent.h" #include "gdbmi.h" +#include "gdboptionspage.h" +#include "memoryagent.h" +#include "watchutils.h" #include "breakhandler.h" #include "moduleshandler.h" @@ -62,16 +62,12 @@ #include "threadshandler.h" #include "watchhandler.h" -#include "sourcefileswindow.h" - -#include "debuggerdialogs.h" #include "logwindow.h" -#include -#include -#include -#include #include +#include +#include +#include #include #include diff --git a/src/plugins/debugger/lldb/ipcenginehost.cpp b/src/plugins/debugger/lldb/ipcenginehost.cpp index 642f600459..f3258f342f 100644 --- a/src/plugins/debugger/lldb/ipcenginehost.cpp +++ b/src/plugins/debugger/lldb/ipcenginehost.cpp @@ -28,6 +28,7 @@ **************************************************************************/ #include "ipcenginehost.h" + #include "ipcengineguest.h" #include "breakhandler.h" #include "breakpoint.h" @@ -38,15 +39,17 @@ #include "watchhandler.h" #include "watchutils.h" #include "threadshandler.h" -#include "debuggeragents.h" +#include "disassembleragent.h" +#include "memoryagent.h" #include "debuggerstreamops.h" #include "debuggercore.h" +#include + #include #include #include #include -#include #include #if Q_BYTE_ORDER == Q_LITTLE_ENDIAN diff --git a/src/plugins/debugger/lldb/lldbenginehost.cpp b/src/plugins/debugger/lldb/lldbenginehost.cpp index a5f3b79b35..be77862627 100644 --- a/src/plugins/debugger/lldb/lldbenginehost.cpp +++ b/src/plugins/debugger/lldb/lldbenginehost.cpp @@ -36,7 +36,6 @@ #include "debuggerdialogs.h" #include "debuggerplugin.h" #include "debuggerstringutils.h" -#include "coreplugin/icore.h" #include "breakhandler.h" #include "breakpoint.h" @@ -46,9 +45,12 @@ #include "watchhandler.h" #include "watchutils.h" #include "threadshandler.h" -#include "debuggeragents.h" +#include "disassembleragent.h" +#include "memoryagent.h" +#include #include + #include #include #include diff --git a/src/plugins/debugger/memoryagent.cpp b/src/plugins/debugger/memoryagent.cpp new file mode 100644 index 0000000000..139fe3879d --- /dev/null +++ b/src/plugins/debugger/memoryagent.cpp @@ -0,0 +1,159 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** Commercial Usage +** +** Licensees holding valid Qt Commercial licenses may use this file in +** accordance with the Qt Commercial License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Nokia. +** +** GNU Lesser General Public License Usage +** +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://qt.nokia.com/contact. +** +**************************************************************************/ + +#include "memoryagent.h" + +#include "debuggerengine.h" +#include "debuggercore.h" + +#include +#include +#include +#include + +#include + +#include + +using namespace Core; + +namespace Debugger { +namespace Internal { + +/////////////////////////////////////////////////////////////////////// +// +// MemoryViewAgent +// +/////////////////////////////////////////////////////////////////////// + +/*! + \class MemoryViewAgent + + Objects form this class are created in response to user actions in + the Gui for showing raw memory from the inferior. After creation + it handles communication between the engine and the bineditor. +*/ + +namespace { const int DataRange = 1024 * 1024; } + +MemoryViewAgent::MemoryViewAgent(Debugger::DebuggerEngine *engine, quint64 addr) + : QObject(engine), m_engine(engine) +{ + QTC_ASSERT(engine, /**/); + createBinEditor(addr); +} + +MemoryViewAgent::~MemoryViewAgent() +{ + EditorManager *editorManager = EditorManager::instance(); + QList editors; + foreach (QPointer editor, m_editors) + if (editor) + editors.append(editor.data()); + editorManager->closeEditors(editors); +} + +void MemoryViewAgent::createBinEditor(quint64 addr) +{ + EditorManager *editorManager = EditorManager::instance(); + QString titlePattern = tr("Memory $"); + IEditor *editor = editorManager->openEditorWithContents( + Core::Constants::K_DEFAULT_BINARY_EDITOR_ID, + &titlePattern); + if (editor) { + connect(editor->widget(), + SIGNAL(lazyDataRequested(Core::IEditor *, quint64,bool)), + SLOT(fetchLazyData(Core::IEditor *, quint64,bool))); + connect(editor->widget(), + SIGNAL(newWindowRequested(quint64)), + SLOT(createBinEditor(quint64))); + connect(editor->widget(), + SIGNAL(newRangeRequested(Core::IEditor *, quint64)), + SLOT(provideNewRange(Core::IEditor*,quint64))); + connect(editor->widget(), + SIGNAL(startOfFileRequested(Core::IEditor *)), + SLOT(handleStartOfFileRequested(Core::IEditor*))); + connect(editor->widget(), + SIGNAL(endOfFileRequested(Core::IEditor *)), + SLOT(handleEndOfFileRequested(Core::IEditor*))); + m_editors << editor; + editorManager->activateEditor(editor); + QMetaObject::invokeMethod(editor->widget(), "setNewWindowRequestAllowed"); + QMetaObject::invokeMethod(editor->widget(), "setLazyData", + Q_ARG(quint64, addr), Q_ARG(int, DataRange), Q_ARG(int, BinBlockSize)); + } else { + showMessageBox(QMessageBox::Warning, + tr("No memory viewer available"), + tr("The memory contents cannot be shown as no viewer plugin " + "for binary data has been loaded.")); + deleteLater(); + } +} + +void MemoryViewAgent::fetchLazyData(IEditor *editor, quint64 block, bool sync) +{ + Q_UNUSED(sync); // FIXME: needed support for incremental searching + m_engine->fetchMemory(this, editor, BinBlockSize * block, BinBlockSize); +} + +void MemoryViewAgent::addLazyData(QObject *editorToken, quint64 addr, + const QByteArray &ba) +{ + IEditor *editor = qobject_cast(editorToken); + if (editor && editor->widget()) { + Core::EditorManager::instance()->activateEditor(editor); + QMetaObject::invokeMethod(editor->widget(), "addLazyData", + Q_ARG(quint64, addr / BinBlockSize), Q_ARG(QByteArray, ba)); + } +} + +void MemoryViewAgent::provideNewRange(IEditor *editor, quint64 address) +{ + QMetaObject::invokeMethod(editor->widget(), "setLazyData", + Q_ARG(quint64, address), Q_ARG(int, DataRange), + Q_ARG(int, BinBlockSize)); +} + +// Since we are not dealing with files, we take these signals to mean +// "move to start/end of range". This seems to make more sense than +// jumping to the start or end of the address space, respectively. +void MemoryViewAgent::handleStartOfFileRequested(IEditor *editor) +{ + QMetaObject::invokeMethod(editor->widget(), + "setCursorPosition", Q_ARG(int, 0)); +} + +void MemoryViewAgent::handleEndOfFileRequested(IEditor *editor) +{ + QMetaObject::invokeMethod(editor->widget(), + "setCursorPosition", Q_ARG(int, DataRange - 1)); +} + +} // namespace Internal +} // namespace Debugger diff --git a/src/plugins/debugger/memoryagent.h b/src/plugins/debugger/memoryagent.h new file mode 100644 index 0000000000..74bfc1de36 --- /dev/null +++ b/src/plugins/debugger/memoryagent.h @@ -0,0 +1,75 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** Commercial Usage +** +** Licensees holding valid Qt Commercial licenses may use this file in +** accordance with the Qt Commercial License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Nokia. +** +** GNU Lesser General Public License Usage +** +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://qt.nokia.com/contact. +** +**************************************************************************/ + +#ifndef DEBUGGER_MEMORYAGENT_H +#define DEBUGGER_MEMORYAGENT_H + +#include +#include + +namespace Core { +class IEditor; +} + +namespace Debugger { + +class DebuggerEngine; + +namespace Internal { + +class MemoryViewAgent : public QObject +{ + Q_OBJECT + +public: + // Called from Gui + explicit MemoryViewAgent(DebuggerEngine *engine, quint64 startaddr); + ~MemoryViewAgent(); + + enum { BinBlockSize = 1024 }; + +public slots: + // Called from Engine + void addLazyData(QObject *editorToken, quint64 addr, const QByteArray &data); + +private: + Q_SLOT void createBinEditor(quint64 startAddr); + Q_SLOT void fetchLazyData(Core::IEditor *, quint64 block, bool sync); + Q_SLOT void provideNewRange(Core::IEditor *editor, quint64 address); + Q_SLOT void handleStartOfFileRequested(Core::IEditor *editor); + Q_SLOT void handleEndOfFileRequested(Core::IEditor *editor); + + QList > m_editors; + QPointer m_engine; +}; + +} // namespace Internal +} // namespace Debugger + +#endif // DEBUGGER_MEMORYAGENT_H diff --git a/src/plugins/debugger/registerwindow.cpp b/src/plugins/debugger/registerwindow.cpp index 6893dcc343..355638de6a 100644 --- a/src/plugins/debugger/registerwindow.cpp +++ b/src/plugins/debugger/registerwindow.cpp @@ -30,7 +30,6 @@ #include "registerwindow.h" #include "debuggeractions.h" -#include "debuggeragents.h" #include "debuggerconstants.h" #include "debuggercore.h" #include "debuggerengine.h" @@ -237,7 +236,7 @@ void RegisterWindow::contextMenuEvent(QContextMenuEvent *ev) else if (act == actReload) engine->reloadRegisters(); else if (act == actShowMemory) - (void) new MemoryViewAgent(engine, address); + engine->openMemoryView(address.toULongLong(0, 0)); else if (act == act16) handler->setNumberBase(16); else if (act == act10) diff --git a/src/plugins/debugger/stackhandler.cpp b/src/plugins/debugger/stackhandler.cpp index a2c5df6bf1..b83f499ffe 100644 --- a/src/plugins/debugger/stackhandler.cpp +++ b/src/plugins/debugger/stackhandler.cpp @@ -30,7 +30,6 @@ #include "stackhandler.h" #include "debuggeractions.h" -#include "debuggeragents.h" #include "debuggercore.h" #include "debuggerengine.h" diff --git a/src/plugins/debugger/stackwindow.cpp b/src/plugins/debugger/stackwindow.cpp index d5bda5594b..dc383ed956 100644 --- a/src/plugins/debugger/stackwindow.cpp +++ b/src/plugins/debugger/stackwindow.cpp @@ -31,7 +31,6 @@ #include "stackhandler.h" #include "debuggeractions.h" -#include "debuggeragents.h" #include "debuggerconstants.h" #include "debuggercore.h" #include "debuggerengine.h" @@ -159,11 +158,9 @@ void StackWindow::contextMenuEvent(QContextMenuEvent *ev) else if (act == actAlwaysAdjust) setAlwaysResizeColumnsToContents(!m_alwaysResizeColumnsToContents); else if (act == actShowMemory) - (void) new MemoryViewAgent(currentEngine(), address); - else if (act == actShowDisassembler) { - DisassemblerViewAgent *agent = new DisassemblerViewAgent(engine); - agent->setFrame(frame, true, false); - } + engine->openMemoryView(address); + else if (act == actShowDisassembler) + engine->openDisassemblerView(frame); } void StackWindow::copyContentsToClipboard() diff --git a/src/plugins/debugger/watchhandler.cpp b/src/plugins/debugger/watchhandler.cpp index d1527fd6ed..b84d3679fe 100644 --- a/src/plugins/debugger/watchhandler.cpp +++ b/src/plugins/debugger/watchhandler.cpp @@ -31,7 +31,6 @@ #include "breakhandler.h" #include "debuggeractions.h" -#include "debuggeragents.h" #include "debuggercore.h" #include "debuggerengine.h" #include "watchutils.h" diff --git a/src/plugins/debugger/watchwindow.cpp b/src/plugins/debugger/watchwindow.cpp index 79bfc1b137..de54efbdc8 100644 --- a/src/plugins/debugger/watchwindow.cpp +++ b/src/plugins/debugger/watchwindow.cpp @@ -30,7 +30,6 @@ #include "watchwindow.h" #include "breakhandler.h" -#include "debuggeragents.h" #include "debuggeractions.h" #include "debuggerconstants.h" #include "debuggercore.h" @@ -456,13 +455,13 @@ void WatchWindow::contextMenuEvent(QContextMenuEvent *ev) } else if (act == actInsertNewWatchItem) { watchExpression(QString()); } else if (act == actOpenMemoryEditAtVariableAddress) { - (void) new MemoryViewAgent(currentEngine(), address); + currentEngine()->openMemoryView(address); } else if (act == actOpenMemoryEditAtPointerValue) { - (void) new MemoryViewAgent(currentEngine(), pointerValue); + currentEngine()->openMemoryView(pointerValue); } else if (act == actOpenMemoryEditor) { AddressDialog dialog; if (dialog.exec() == QDialog::Accepted) - (void) new MemoryViewAgent(currentEngine(), dialog.address()); + currentEngine()->openMemoryView(dialog.address()); } else if (act == actSetWatchpointAtVariableAddress) { setWatchpoint(address); } else if (act == actSetWatchpointAtPointerValue) { -- 2.11.0