summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorhjk <qtc-committer@nokia.com>2009-02-12 13:31:19 +0100
committerhjk <qtc-committer@nokia.com>2009-02-12 13:31:19 +0100
commitdee68a29c10542afc619f871b0a8788bea170b66 (patch)
tree9da8de2f63e03c67eb970ae1dff9ac70cf2e03ef /src
parent308edee44c8177a0c0ef23e9d8551994126e9154 (diff)
downloadqt-creator-dee68a29c10542afc619f871b0a8788bea170b66.tar.gz
Fixes: debugger: work on breakpoints in plugins
Diffstat (limited to 'src')
-rw-r--r--src/plugins/debugger/debuggermanager.cpp4
-rw-r--r--src/plugins/debugger/debuggerplugin.cpp1
-rw-r--r--src/plugins/debugger/gdbengine.cpp166
-rw-r--r--src/plugins/debugger/gdbengine.h5
-rw-r--r--src/plugins/debugger/idebuggerengine.h1
5 files changed, 36 insertions, 141 deletions
diff --git a/src/plugins/debugger/debuggermanager.cpp b/src/plugins/debugger/debuggermanager.cpp
index 213edee43c..53eac322e4 100644
--- a/src/plugins/debugger/debuggermanager.cpp
+++ b/src/plugins/debugger/debuggermanager.cpp
@@ -561,7 +561,7 @@ void DebuggerManager::notifyInferiorUpdateFinished()
void DebuggerManager::notifyInferiorRunningRequested()
{
setStatus(DebuggerInferiorRunningRequested);
- showStatusMessage(tr("Running..."), 5000);
+ showStatusMessage(tr("Running requested..."), 5000);
}
void DebuggerManager::notifyInferiorRunning()
@@ -579,7 +579,7 @@ void DebuggerManager::notifyInferiorExited()
void DebuggerManager::notifyInferiorPidChanged(int pid)
{
//QMessageBox::warning(0, "PID", "PID: " + QString::number(pid));
- //qDebug() << "PID: " << pid;
+ qDebug() << "PID: " << pid;
emit inferiorPidChanged(pid);
}
diff --git a/src/plugins/debugger/debuggerplugin.cpp b/src/plugins/debugger/debuggerplugin.cpp
index 18c7e6d0c5..d3e61c79c2 100644
--- a/src/plugins/debugger/debuggerplugin.cpp
+++ b/src/plugins/debugger/debuggerplugin.cpp
@@ -337,7 +337,6 @@ void GdbOptionPage::apply()
m_settings.m_pluginSelectedBreakpointsPattern =
m_ui.lineEditSelectedPluginBreakpointsPattern->text();
-
*m_plugin->m_manager->settings() = m_settings;
m_plugin->writeSettings();
}
diff --git a/src/plugins/debugger/gdbengine.cpp b/src/plugins/debugger/gdbengine.cpp
index 8b4051f839..9f0a3b3ace 100644
--- a/src/plugins/debugger/gdbengine.cpp
+++ b/src/plugins/debugger/gdbengine.cpp
@@ -99,10 +99,8 @@ enum GdbCommandType
GdbQueryPwd,
GdbQuerySources,
GdbAsyncOutput2,
+ GdbStart,
GdbExecRun,
- GdbExecStart1,
- GdbExecStart2,
- GdbExecStart3,
GdbExecRunToFunction,
GdbExecStep,
GdbExecNext,
@@ -460,13 +458,28 @@ void GdbEngine::handleResponse()
break;
}
- case '~':
- case '@':
+ case '~': {
+ QString data = GdbMi::parseCString(from, to);
+ m_pendingConsoleStreamOutput += data;
+ m_inbuffer = QByteArray(from, to - from);
+ break;
+ }
+
+ case '@': {
+ QString data = GdbMi::parseCString(from, to);
+ m_pendingTargetStreamOutput += data;
+ m_inbuffer = QByteArray(from, to - from);
+ break;
+ }
+
case '&': {
QString data = GdbMi::parseCString(from, to);
- handleStreamOutput(data, c);
- //dump(oldfrom, from, record.toString());
+ m_pendingLogStreamOutput += data;
m_inbuffer = QByteArray(from, to - from);
+ // On Windows, the contents seem to depend on the debugger
+ // version and/or OS version used.
+ if (data.startsWith("warning:"))
+ qq->showApplicationOutput(data);
break;
}
@@ -759,14 +772,8 @@ void GdbEngine::handleResult(const GdbResultRecord & record, int type,
handleExecRun(record);
break;
- case GdbExecStart1:
- handleExecStart1(record);
- break;
- case GdbExecStart2:
- //handleExecStart2(record);
- break;
- case GdbExecStart3:
- handleExecStart3(record);
+ case GdbStart:
+ handleStart(record);
break;
case GdbInfoProc:
handleInfoProc(record);
@@ -1028,84 +1035,6 @@ void GdbEngine::handleExecRunToFunction(const GdbResultRecord &record)
q->gotoLocation(file, line, true);
}
-void GdbEngine::handleStreamOutput(const QString &data, char code)
-{
- // Linux
- if (data.contains("[New Thread")) {
- QRegExp re("\\[New Thread 0x([0-9a-f]*) \\(LWP ([0-9]*)\\)\\]");
- if (re.indexIn(data) != -1)
- maybeHandleInferiorPidChanged(re.cap(2));
- }
-
- // Mac
- if (data.contains("[Switching to process ")) {
- QRegExp re("\\[Switching to process ([0-9]*) local thread 0x([0-9a-f]*)\\]");
- if (re.indexIn(data) != -1)
- maybeHandleInferiorPidChanged(re.cap(1));
- }
-
- // present it twice: now and together with the next 'real' result
- switch (code) {
- case '~':
- m_pendingConsoleStreamOutput += data;
- break;
- case '@':
- m_pendingTargetStreamOutput += data;
- break;
- case '&':
- m_pendingLogStreamOutput += data;
- // On Windows, the contents seem to depend on the debugger
- // version and/or OS version used.
- if (data.startsWith("warning:"))
- qq->showApplicationOutput(data);
- break;
- }
-
-#ifdef Q_OS_LINUX
- if (data.startsWith("Pending break") && data.contains("\" resolved")) {
- qDebug() << "SCHEDULING -break-list";
- //m_breakListOnStopNeeded = true;
- }
-#endif
-
-#if 0
- if (m_slurpingPTypeOutput)
- qDebug() << "SLURP: " << output.data;
-
- // "No symbol \"__dlopen\" in current context."
- // "No symbol \"dlopen\" in current context."
- if (output.data.startsWith("No symbol ")
- && output.data.contains("dlopen")) {
- m_dlopened = true;
- return;
- }
-
- // output of 'ptype <foo>'
- if (output.data.startsWith("type = ")) {
- if (output.data.endsWith("{") || output.data.endsWith("{\\n")) {
- // multi-line output started here...
- m_slurpingPTypeOutput = true;
- m_slurpedPTypeOutput = output.data;
- } else {
- // Happens for simple types. Process it immediately
- m_watchHandler->handleTypeContents(output.data);
- }
- return;
- }
- if (m_slurpingPTypeOutput) {
- m_slurpedPTypeOutput += '\n';
- m_slurpedPTypeOutput += output.data;
- if (output.data.startsWith("}")) {
- // this is the last line...
- m_slurpingPTypeOutput = false;
- m_watchHandler->handleTypeContents(m_slurpedPTypeOutput);
- m_slurpedPTypeOutput.clear();
- }
- return;
- }
-#endif
-}
-
static bool isExitedReason(const QString &reason)
{
return reason == QLatin1String("exited-normally") // inferior exited normally
@@ -1633,13 +1562,17 @@ bool GdbEngine::startDebugger()
}
if (q->startMode() == q->startInternal) {
+ emit gdbInputAvailable(QString(), QString());
sendCommand("-file-exec-and-symbols " + fileName, GdbFileExecAndSymbols);
//sendCommand("file " + fileName, GdbFileExecAndSymbols);
#ifdef Q_OS_MAC
sendCommand("sharedlibrary apply-load-rules all");
#endif
- //sendCommand("-gdb-set stop-on-solib-events 1");
- runInferior();
+ setTokenBarrier();
+ if (!q->m_processArgs.isEmpty())
+ sendCommand("-exec-arguments " + q->m_processArgs.join(" "));
+ sendCommand("set auto-solib-add off");
+ sendCommand("x/2i _start", GdbStart);
}
if (q->startMode() == q->attachExternal) {
@@ -1678,21 +1611,7 @@ void GdbEngine::continueInferior()
sendCommand("-exec-continue", GdbExecContinue);
}
-void GdbEngine::runInferior()
-{
- q->resetLocation();
- // FIXME: this ignores important startup messages
- setTokenBarrier();
- if (!q->m_processArgs.isEmpty())
- sendCommand("-exec-arguments " + q->m_processArgs.join(" "));
- qq->notifyInferiorRunningRequested();
- emit gdbInputAvailable(QString(), QString());
-
- sendCommand("set auto-solib-add off");
- sendCommand("x/2i _start", GdbExecStart1);
-}
-
-void GdbEngine::handleExecStart1(const GdbResultRecord &response)
+void GdbEngine::handleStart(const GdbResultRecord &response)
{
if (response.resultClass == GdbResultDone) {
// stdout:&"x/2i _start\n"
@@ -1702,8 +1621,9 @@ void GdbEngine::handleExecStart1(const GdbResultRecord &response)
QRegExp needle("0x([0-9a-f]+) <_start\\+.*>:");
if (needle.indexIn(msg) != -1) {
//qDebug() << "STREAM: " << msg << needle.cap(1);
- sendCommand("tbreak *0x" + needle.cap(1)); // GdbExecStart3);
- sendCommand("-exec-run"); // GdbExecStart3);
+ sendCommand("tbreak *0x" + needle.cap(1));
+ sendCommand("-exec-run");
+ qq->notifyInferiorRunningRequested();
} else {
qDebug() << "PARSING START ADDRESS FAILED" << msg;
}
@@ -1712,20 +1632,6 @@ void GdbEngine::handleExecStart1(const GdbResultRecord &response)
}
}
-void GdbEngine::handleExecStart3(const GdbResultRecord &)
-{
-#if defined(Q_OS_WIN)
- sendCommand("info proc", GdbInfoProc);
-#endif
-#if defined(Q_OS_LINUX)
- sendCommand("info proc", GdbInfoProc);
-#endif
-#if defined(Q_OS_MAC)
- sendCommand("info pid", GdbInfoProc, QVariant(), true);
-#endif
- attemptBreakpointSynchronization();
-}
-
void GdbEngine::stepExec()
{
setTokenBarrier();
@@ -2244,12 +2150,7 @@ void GdbEngine::attemptBreakpointSynchronization()
}
}
- if (updateNeeded) {
- //interruptAndContinue();
- //sendListBreakpoints();
- }
-
- if (!updateNeeded && q->status() == DebuggerProcessStartingUp) {
+ if (!updateNeeded) {
// we continue the execution
continueInferior();
}
@@ -4017,7 +3918,6 @@ void GdbEngine::assignValueInDebugger(const QString &expression, const QString &
sendCommand("-var-assign assign " + value, WatchVarAssign);
}
-
void GdbEngine::tryLoadCustomDumpers()
{
if (m_dataDumperState != DataDumperUninitialized)
diff --git a/src/plugins/debugger/gdbengine.h b/src/plugins/debugger/gdbengine.h
index 7973ef4c68..0b304e1066 100644
--- a/src/plugins/debugger/gdbengine.h
+++ b/src/plugins/debugger/gdbengine.h
@@ -113,7 +113,6 @@ private:
void exitDebugger();
void continueInferior();
- void runInferior();
void interruptInferior();
void runToLineExec(const QString &fileName, int lineNumber);
@@ -179,14 +178,12 @@ private slots:
private:
int terminationIndex(const QByteArray &buffer, int &length);
- void handleStreamOutput(const QString &output, char code);
+ void handleStart(const GdbResultRecord &response);
void handleAsyncOutput2(const GdbMi &data);
void handleAsyncOutput(const GdbMi &data);
void handleResultRecord(const GdbResultRecord &response);
void handleFileExecAndSymbols(const GdbResultRecord &response);
void handleExecRun(const GdbResultRecord &response);
- void handleExecStart1(const GdbResultRecord &response);
- void handleExecStart3(const GdbResultRecord &response);
void handleExecJumpToLine(const GdbResultRecord &response);
void handleExecRunToFunction(const GdbResultRecord &response);
void handleInfoShared(const GdbResultRecord &response);
diff --git a/src/plugins/debugger/idebuggerengine.h b/src/plugins/debugger/idebuggerengine.h
index 1558d140ee..ee1e15793f 100644
--- a/src/plugins/debugger/idebuggerengine.h
+++ b/src/plugins/debugger/idebuggerengine.h
@@ -62,7 +62,6 @@ public:
virtual void nextIExec() = 0;
virtual void continueInferior() = 0;
- virtual void runInferior() = 0;
virtual void interruptInferior() = 0;
virtual void runToLineExec(const QString &fileName, int lineNumber) = 0;