aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorhjk <qtc-committer@nokia.com>2009-11-19 09:51:21 +0100
committercon <qtc-committer@nokia.com>2009-11-19 18:35:32 +0100
commitc7ea05fff71e6979f5aaa7430c3cf15b9d7466ed (patch)
treef48ccd8b8e47398f2cc2b934e3b2f290572dcd34
parent1b042a225c543fd06a6fdcd74e1fa3b48683270f (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.cpp24
-rw-r--r--src/plugins/debugger/debuggeragents.h1
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;
};