diff options
author | hjk <qtc-committer@nokia.com> | 2009-11-19 09:51:21 +0100 |
---|---|---|
committer | con <qtc-committer@nokia.com> | 2009-11-19 18:35:32 +0100 |
commit | c7ea05fff71e6979f5aaa7430c3cf15b9d7466ed (patch) | |
tree | f48ccd8b8e47398f2cc2b934e3b2f290572dcd34 | |
parent | 1b042a225c543fd06a6fdcd74e1fa3b48683270f (diff) |
debugger: prevent crash when trying to view memory if bin editor is
unavailable
(cherry picked from commit 4461ec2ef57e16a3ba69ec0e9ee919a8b1d6c4f3)
-rw-r--r-- | src/plugins/debugger/debuggeragents.cpp | 24 | ||||
-rw-r--r-- | src/plugins/debugger/debuggeragents.h | 1 |
2 files changed, 18 insertions, 7 deletions
diff --git a/src/plugins/debugger/debuggeragents.cpp b/src/plugins/debugger/debuggeragents.cpp index d29b5e506f..102be15cb7 100644 --- a/src/plugins/debugger/debuggeragents.cpp +++ b/src/plugins/debugger/debuggeragents.cpp @@ -44,6 +44,8 @@ #include <utils/qtcassert.h> #include <QtCore/QDebug> + +#include <QtGui/QMessageBox> #include <QtGui/QPlainTextEdit> #include <QtGui/QTextCursor> #include <QtGui/QSyntaxHighlighter> @@ -68,13 +70,13 @@ namespace Internal { */ MemoryViewAgent::MemoryViewAgent(DebuggerManager *manager, quint64 addr) - : QObject(manager), m_engine(manager->currentEngine()) + : QObject(manager), m_engine(manager->currentEngine()), m_manager(manager) { init(addr); } MemoryViewAgent::MemoryViewAgent(DebuggerManager *manager, const QString &addr) - : QObject(manager), m_engine(manager->currentEngine()) + : QObject(manager), m_engine(manager->currentEngine()), m_manager(manager) { bool ok = true; init(addr.toULongLong(&ok, 0)); @@ -94,11 +96,19 @@ void MemoryViewAgent::init(quint64 addr) m_editor = editorManager->openEditorWithContents( Core::Constants::K_DEFAULT_BINARY_EDITOR, &titlePattern); - connect(m_editor->widget(), SIGNAL(lazyDataRequested(quint64,bool)), - this, SLOT(fetchLazyData(quint64,bool))); - editorManager->activateEditor(m_editor); - QMetaObject::invokeMethod(m_editor->widget(), "setLazyData", - Q_ARG(quint64, addr), Q_ARG(int, 1024 * 1024), Q_ARG(int, BinBlockSize)); + if (m_editor) { + connect(m_editor->widget(), SIGNAL(lazyDataRequested(quint64,bool)), + this, SLOT(fetchLazyData(quint64,bool))); + editorManager->activateEditor(m_editor); + QMetaObject::invokeMethod(m_editor->widget(), "setLazyData", + Q_ARG(quint64, addr), Q_ARG(int, 1024 * 1024), Q_ARG(int, BinBlockSize)); + } else { + m_manager->showMessageBox(QMessageBox::Warning, + tr("No memory viewer available"), + tr("The memory contents cannot be shown as no viewer plugin not " + "the BinEditor plugin could be loaded.")); + deleteLater(); + } } void MemoryViewAgent::fetchLazyData(quint64 block, bool sync) diff --git a/src/plugins/debugger/debuggeragents.h b/src/plugins/debugger/debuggeragents.h index ff7e4879aa..f0888c6b92 100644 --- a/src/plugins/debugger/debuggeragents.h +++ b/src/plugins/debugger/debuggeragents.h @@ -70,6 +70,7 @@ private: QPointer<IDebuggerEngine> m_engine; QPointer<Core::IEditor> m_editor; + QPointer<DebuggerManager> m_manager; }; |