summaryrefslogtreecommitdiff
path: root/src/plugins/debugger
diff options
context:
space:
mode:
authorhjk <hjk121@nokiamail.com>2014-01-04 01:34:51 +0100
committerhjk <hjk121@nokiamail.com>2014-01-06 12:42:47 +0100
commit32aeb579bb0d54551687ee1e37bc2ca204c0f7cb (patch)
tree46bd59b2f06308e35d83dde13cf580ccf20691aa /src/plugins/debugger
parent63c2656d559b33f83a954bbec55448b89a962145 (diff)
downloadqt-creator-32aeb579bb0d54551687ee1e37bc2ca204c0f7cb.tar.gz
Debugger: Simplify "debug last command"
Let the engine decide what to do. Less magic parsing, less code, and survives cleaning the log view. Change-Id: Ic94f27899d7986fb5ce3d24bb2edce8e6faf899c Reviewed-by: hjk <hjk121@nokiamail.com>
Diffstat (limited to 'src/plugins/debugger')
-rw-r--r--src/plugins/debugger/debuggercore.h1
-rw-r--r--src/plugins/debugger/debuggerengine.h4
-rw-r--r--src/plugins/debugger/debuggerplugin.cpp9
-rw-r--r--src/plugins/debugger/gdb/gdbengine.cpp5
-rw-r--r--src/plugins/debugger/gdb/gdbengine.h3
-rw-r--r--src/plugins/debugger/gdb/pythongdbengine.cpp12
-rw-r--r--src/plugins/debugger/logwindow.cpp21
7 files changed, 28 insertions, 27 deletions
diff --git a/src/plugins/debugger/debuggercore.h b/src/plugins/debugger/debuggercore.h
index d8119edea8..307159fab9 100644
--- a/src/plugins/debugger/debuggercore.h
+++ b/src/plugins/debugger/debuggercore.h
@@ -118,7 +118,6 @@ public:
const QVector<Section> &sections) = 0;
virtual void openMemoryEditor() = 0;
virtual void languagesChanged() = 0;
- virtual void executeDebuggerCommand(const QString &command, DebuggerLanguages languages) = 0;
virtual Utils::SavedAction *action(int code) const = 0;
virtual bool boolSetting(int code) const = 0;
diff --git a/src/plugins/debugger/debuggerengine.h b/src/plugins/debugger/debuggerengine.h
index 672fefdb6d..11f063e7e7 100644
--- a/src/plugins/debugger/debuggerengine.h
+++ b/src/plugins/debugger/debuggerengine.h
@@ -189,6 +189,7 @@ public:
virtual void setRegisterValue(int regnr, const QString &value);
virtual void addOptionPages(QList<Core::IOptionsPage*> *) const;
virtual bool hasCapability(unsigned cap) const = 0;
+ virtual void debugLastCommand() {}
virtual bool isSynchronous() const;
virtual QByteArray qtNamespace() const;
@@ -205,6 +206,8 @@ public:
virtual void changeBreakpoint(BreakpointModelId id); // FIXME: make pure
virtual bool acceptsDebuggerCommands() const { return true; }
+ virtual void executeDebuggerCommand(const QString &command, DebuggerLanguages languages);
+
virtual void assignValueInDebugger(const Internal::WatchData *data,
const QString &expr, const QVariant &value);
virtual void selectThread(Internal::ThreadId threadId) = 0;
@@ -347,7 +350,6 @@ protected:
virtual void executeRunToLine(const Internal::ContextData &data);
virtual void executeRunToFunction(const QString &functionName);
virtual void executeJumpToLine(const Internal::ContextData &data);
- virtual void executeDebuggerCommand(const QString &command, DebuggerLanguages languages);
virtual void frameUp();
virtual void frameDown();
diff --git a/src/plugins/debugger/debuggerplugin.cpp b/src/plugins/debugger/debuggerplugin.cpp
index f1a02a89d3..4ab37373c5 100644
--- a/src/plugins/debugger/debuggerplugin.cpp
+++ b/src/plugins/debugger/debuggerplugin.cpp
@@ -931,7 +931,6 @@ public slots:
void aboutToUnloadSession();
void aboutToSaveSession();
- void executeDebuggerCommand(const QString &command, DebuggerLanguages languages);
void coreShutdown();
#ifdef WITH_TESTS
@@ -2449,14 +2448,6 @@ void DebuggerPluginPrivate::aboutToSaveSession()
m_breakHandler->saveSessionData();
}
-void DebuggerPluginPrivate::executeDebuggerCommand(const QString &command, DebuggerLanguages languages)
-{
- if (currentEngine()->acceptsDebuggerCommands())
- currentEngine()->executeDebuggerCommand(command, languages);
- else
- showStatusMessage(tr("User commands are not accepted in the current state."));
-}
-
void DebuggerPluginPrivate::showStatusMessage(const QString &msg0, int timeout)
{
showMessage(msg0, LogStatus);
diff --git a/src/plugins/debugger/gdb/gdbengine.cpp b/src/plugins/debugger/gdb/gdbengine.cpp
index fb53eb8fc0..4fdb8529de 100644
--- a/src/plugins/debugger/gdb/gdbengine.cpp
+++ b/src/plugins/debugger/gdb/gdbengine.cpp
@@ -5484,6 +5484,11 @@ QByteArray GdbEngine::dotEscape(QByteArray str)
return str;
}
+void GdbEngine::debugLastCommand()
+{
+ postCommand(m_lastDebuggableCommand, Discardable);
+}
+
//
// Factory
//
diff --git a/src/plugins/debugger/gdb/gdbengine.h b/src/plugins/debugger/gdb/gdbengine.h
index cc863bb7ea..1a0369fc74 100644
--- a/src/plugins/debugger/gdb/gdbengine.h
+++ b/src/plugins/debugger/gdb/gdbengine.h
@@ -714,6 +714,9 @@ protected:
static QString msgConnectRemoteServerFailed(const QString &why);
static QByteArray dotEscape(QByteArray str);
+ void debugLastCommand();
+ QByteArray m_lastDebuggableCommand;
+
protected:
enum DumperHandling
{
diff --git a/src/plugins/debugger/gdb/pythongdbengine.cpp b/src/plugins/debugger/gdb/pythongdbengine.cpp
index 3fd1283799..3072ab7f89 100644
--- a/src/plugins/debugger/gdb/pythongdbengine.cpp
+++ b/src/plugins/debugger/gdb/pythongdbengine.cpp
@@ -130,9 +130,15 @@ void GdbEngine::updateLocalsPython(const UpdateParameters &params)
if (!m_resultVarName.isEmpty())
resultVar = "resultvarname:" + m_resultVarName + ' ';
- postCommand("bb options:" + options + " vars:" + params.varList + ' '
- + resultVar + expanded + " watchers:" + watchers.toHex() + cutOff,
- Discardable, CB(handleStackFramePython), QVariant(params.tryPartial));
+ QByteArray cmd =
+ "bb options:" + options + " vars:" + params.varList + ' '
+ + resultVar + expanded + " watchers:" + watchers.toHex() + cutOff;
+
+ m_lastDebuggableCommand =
+ "bb options:pe," + options + " vars:" + params.varList + ' '
+ + resultVar + expanded + " watchers:" + watchers.toHex() + cutOff;
+
+ postCommand(cmd, Discardable, CB(handleStackFramePython), QVariant(params.tryPartial));
}
void GdbEngine::handleStackFramePython(const GdbResponse &response)
diff --git a/src/plugins/debugger/logwindow.cpp b/src/plugins/debugger/logwindow.cpp
index 7fa9760109..1ae89885f2 100644
--- a/src/plugins/debugger/logwindow.cpp
+++ b/src/plugins/debugger/logwindow.cpp
@@ -433,27 +433,22 @@ LogWindow::LogWindow(QWidget *parent)
void LogWindow::executeLine()
{
m_ignoreNextInputEcho = true;
- debuggerCore()->executeDebuggerCommand(m_inputText->textCursor().block().text(),
- CppLanguage);
+ debuggerCore()->currentEngine()->
+ executeDebuggerCommand(m_inputText->textCursor().block().text(), CppLanguage);
}
void LogWindow::repeatLastCommand()
{
- QTextCursor tc = m_inputText->textCursor();
- QRegExp re = QRegExp(QLatin1String("^\\d+(bb options:)(.*)$"));
- for (QTextBlock block = tc.block(); block.isValid(); block = block.previous()) {
- QString line = block.text();
- if (re.exactMatch(line)) {
- QString cmd = re.cap(1) + QLatin1String("pe,") + re.cap(2);
- debuggerCore()->executeDebuggerCommand(cmd, CppLanguage);
- return;
- }
- }
+ debuggerCore()->currentEngine()->debugLastCommand();
}
void LogWindow::sendCommand()
{
- debuggerCore()->executeDebuggerCommand(m_commandEdit->text(), CppLanguage);
+ DebuggerEngine *engine = debuggerCore()->currentEngine();
+ if (engine->acceptsDebuggerCommands())
+ engine->executeDebuggerCommand(m_commandEdit->text(), CppLanguage);
+ else
+ showOutput(LogError, tr("User commands are not accepted in the current state."));
}
void LogWindow::showOutput(int channel, const QString &output)