From 7cd32722829533e8114826b78f8b4433aa583fa6 Mon Sep 17 00:00:00 2001 From: hjk <qtc-committer@nokia.com> Date: Wed, 8 Dec 2010 14:08:35 +0100 Subject: [PATCH] debugger: make memory view updatable Task-number: QTCREATORBUG-3242 --- src/plugins/debugger/debuggerconstants.h | 1 + src/plugins/debugger/debuggercore.h | 1 + src/plugins/debugger/debuggerplugin.cpp | 11 +++++++++++ src/plugins/debugger/gdb/gdbengine.cpp | 1 + src/plugins/debugger/memoryagent.cpp | 3 ++- .../manual/gdbdebugger/simple/simple_gdbtest_app.cpp | 8 ++++++++ 6 files changed, 24 insertions(+), 1 deletion(-) diff --git a/src/plugins/debugger/debuggerconstants.h b/src/plugins/debugger/debuggerconstants.h index ec79f488631..3f734bd1668 100644 --- a/src/plugins/debugger/debuggerconstants.h +++ b/src/plugins/debugger/debuggerconstants.h @@ -84,6 +84,7 @@ namespace Internal { const char * const OPENED_BY_DEBUGGER = "OpenedByDebugger"; const char * const OPENED_WITH_DISASSEMBLY = "DisassemblerView"; +const char * const OPENED_WITH_MEMORY = "MemoryView"; const char * const DEBUGMODE = "Debugger.DebugMode"; const char * const DEBUG = "Debugger.Debug"; diff --git a/src/plugins/debugger/debuggercore.h b/src/plugins/debugger/debuggercore.h index 95820d89912..0fa30f388e4 100644 --- a/src/plugins/debugger/debuggercore.h +++ b/src/plugins/debugger/debuggercore.h @@ -114,6 +114,7 @@ public: virtual void showModuleSymbols(const QString &moduleName, const QVector<Symbol> &symbols) = 0; virtual void openMemoryEditor() = 0; + virtual void updateMemoryEditors() = 0; virtual void languagesChanged() = 0; virtual Utils::SavedAction *action(int code) const = 0; diff --git a/src/plugins/debugger/debuggerplugin.cpp b/src/plugins/debugger/debuggerplugin.cpp index 8980634d1de..9063dd02ce3 100644 --- a/src/plugins/debugger/debuggerplugin.cpp +++ b/src/plugins/debugger/debuggerplugin.cpp @@ -1027,6 +1027,7 @@ public slots: void languagesChanged(); void showStatusMessage(const QString &msg, int timeout = -1); void openMemoryEditor(); + void updateMemoryEditors(); const CPlusPlus::Snapshot &cppCodeModelSnapshot() const; @@ -2433,6 +2434,16 @@ void DebuggerPluginPrivate::openMemoryEditor() currentEngine()->openMemoryView(dialog.address()); } +void DebuggerPluginPrivate::updateMemoryEditors() +{ + EditorManager *editorManager = EditorManager::instance(); + QTC_ASSERT(editorManager, return); + foreach (IEditor *editor, editorManager->openedEditors()) { + if (editor->property(Constants::OPENED_WITH_MEMORY).toBool()) + QMetaObject::invokeMethod(editor->widget(), "updateContents"); + } +} + void DebuggerPluginPrivate::coreShutdown() { m_shuttingDown = true; diff --git a/src/plugins/debugger/gdb/gdbengine.cpp b/src/plugins/debugger/gdb/gdbengine.cpp index 1e6e1691fb2..63c858a8b54 100644 --- a/src/plugins/debugger/gdb/gdbengine.cpp +++ b/src/plugins/debugger/gdb/gdbengine.cpp @@ -3530,6 +3530,7 @@ void GdbEngine::updateLocals(const QVariant &cookie) updateLocalsPython(false, QByteArray()); else updateLocalsClassic(cookie); + debuggerCore()->updateMemoryEditors(); } diff --git a/src/plugins/debugger/memoryagent.cpp b/src/plugins/debugger/memoryagent.cpp index 139fe3879dd..8577357b970 100644 --- a/src/plugins/debugger/memoryagent.cpp +++ b/src/plugins/debugger/memoryagent.cpp @@ -87,6 +87,8 @@ void MemoryViewAgent::createBinEditor(quint64 addr) Core::Constants::K_DEFAULT_BINARY_EDITOR_ID, &titlePattern); if (editor) { + editor->setProperty(Debugger::Constants::OPENED_BY_DEBUGGER, true); + editor->setProperty(Debugger::Constants::OPENED_WITH_MEMORY, true); connect(editor->widget(), SIGNAL(lazyDataRequested(Core::IEditor *, quint64,bool)), SLOT(fetchLazyData(Core::IEditor *, quint64,bool))); @@ -103,7 +105,6 @@ void MemoryViewAgent::createBinEditor(quint64 addr) 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)); diff --git a/tests/manual/gdbdebugger/simple/simple_gdbtest_app.cpp b/tests/manual/gdbdebugger/simple/simple_gdbtest_app.cpp index c22c5e943e1..a4b5ba91e91 100644 --- a/tests/manual/gdbdebugger/simple/simple_gdbtest_app.cpp +++ b/tests/manual/gdbdebugger/simple/simple_gdbtest_app.cpp @@ -1859,6 +1859,13 @@ public: Foo *f; }; +void testMemoryView() +{ + int a[20]; + for (int i = 0; i != 20; ++i) + a[i] = i; +} + void testUninitialized() { QString s; @@ -2111,6 +2118,7 @@ void testQSettings() int main(int argc, char *argv[]) { + testMemoryView(); //testQSettings(); //testWCout0(); //testWCout(); -- GitLab