diff options
Diffstat (limited to 'src/plugins/debugger/cdb/cdbdebugengine.cpp')
-rw-r--r-- | src/plugins/debugger/cdb/cdbdebugengine.cpp | 26 |
1 files changed, 21 insertions, 5 deletions
diff --git a/src/plugins/debugger/cdb/cdbdebugengine.cpp b/src/plugins/debugger/cdb/cdbdebugengine.cpp index efaa12d2b9..af9da55976 100644 --- a/src/plugins/debugger/cdb/cdbdebugengine.cpp +++ b/src/plugins/debugger/cdb/cdbdebugengine.cpp @@ -360,6 +360,16 @@ bool CdbDebugEngine::startDebuggerWithExecutable(DebuggerStartMode sm, QString * return true; } +void CdbDebugEngine::processTerminated(unsigned long exitCode) +{ + if (debugCDB) + qDebug() << Q_FUNC_INFO << exitCode; + + m_d->setDebuggeeHandles(0, 0); + m_d->m_debuggerManagerAccess->notifyInferiorExited(); + m_d->m_debuggerManager->exitDebugger(); +} + void CdbDebugEngine::exitDebugger() { if (debugCDB) @@ -380,7 +390,9 @@ void CdbDebugEngine::exitDebugger() break; case StartExternal: case StartInternal: + // Terminate and waitr for stop events. hr = m_d->m_pDebugClient->TerminateCurrentProcess(); + QCoreApplication::processEvents(QEventLoop::ExcludeUserInputEvents); if (debugCDB) qDebug() << Q_FUNC_INFO << "terminated" << msgDebugEngineComResult(hr); @@ -469,7 +481,7 @@ bool CdbDebugEnginePrivate::updateLocals(int frameIndex, value = QLatin1String("<unknown>"); } WatchData wd; - wd.iname = QLatin1String("local"); + wd.iname = QLatin1String("local.") + name; wd.name = name; wd.value = value; wd.type = type; @@ -592,6 +604,7 @@ void CdbDebugEngine::continueInferior() m_d->m_debuggerManager->resetLocation(); ULONG executionStatus; + m_d->m_debuggerManagerAccess->notifyInferiorRunningRequested(); HRESULT hr = m_d->m_pDebugControl->GetExecutionStatus(&executionStatus); if (SUCCEEDED(hr) && executionStatus != DEBUG_STATUS_GO) { hr = m_d->m_pDebugControl->SetExecutionStatus(DEBUG_STATUS_GO); @@ -654,8 +667,10 @@ void CdbDebugEngine::activateFrame(int frameIndex) if (debugCDB) qDebug() << Q_FUNC_INFO << frameIndex; - if (m_d->m_debuggerManager->status() != DebuggerInferiorStopped) + if (m_d->m_debuggerManager->status() != DebuggerInferiorStopped) { + qWarning("WARNING %s: invoked while debuggee is running\n", Q_FUNC_INFO); return; + } QString errorMessage; bool success = false; @@ -793,7 +808,7 @@ void CdbDebugEngine::timerEvent(QTimerEvent* te) const HRESULT hr = m_d->m_pDebugControl->WaitForEvent(0, 1); if (debugCDB) if (debugCDB > 1 || hr != S_FALSE) - qDebug() << Q_FUNC_INFO << "WaitForEvent" << msgDebugEngineComResult(hr); + qDebug() << Q_FUNC_INFO << "WaitForEvent" << m_d->m_debuggerManager->status() << msgDebugEngineComResult(hr); switch (hr) { case S_OK: @@ -974,9 +989,10 @@ void CdbDebugEnginePrivate::updateStackTrace() } } -void CdbDebugEnginePrivate::handleDebugOutput(const char* szOutputString) +void CdbDebugEnginePrivate::handleDebugOutput(const char *szOutputString) { - qDebug() << Q_FUNC_INFO << szOutputString; + if (debugCDB && strstr(szOutputString, "ModLoad:") == 0) + qDebug() << Q_FUNC_INFO << szOutputString; m_debuggerManagerAccess->showApplicationOutput(QString::fromLocal8Bit(szOutputString)); } |