diff --git a/src/plugins/debugger/cdb/cdbengine.cpp b/src/plugins/debugger/cdb/cdbengine.cpp index cc2d1f82fbd..344b4629e64 100644 --- a/src/plugins/debugger/cdb/cdbengine.cpp +++ b/src/plugins/debugger/cdb/cdbengine.cpp @@ -374,6 +374,13 @@ void CdbEngine::createFullBacktrace() }}); } +void CdbEngine::handleSetupFailure(const QString &errorMessage) +{ + showMessage(errorMessage, LogError); + Core::AsynchronousMessageBox::critical(tr("Failed to Start the Debugger"), errorMessage); + notifyEngineSetupFailed(); +} + void CdbEngine::setupEngine() { if (debug) @@ -382,46 +389,24 @@ void CdbEngine::setupEngine() init(); if (!m_logTime.elapsed()) m_logTime.start(); - QString errorMessage; + // Console: Launch the stub with the suspended application and attach to it // CDB in theory has a command line option '-2' that launches a // console, too, but that immediately closes when the debuggee quits. // Use the Creator stub instead. - const DebuggerRunParameters &rp = runParameters(); + DebuggerRunParameters sp = runParameters(); if (terminal()) { m_effectiveStartMode = AttachExternal; - DebuggerRunParameters attachParameters = rp; - attachParameters.inferior.executable.clear(); - attachParameters.inferior.commandLineArguments.clear(); - attachParameters.attachPID = ProcessHandle(terminal()->applicationPid()); - attachParameters.startMode = AttachExternal; - attachParameters.inferior.runMode = ApplicationLauncher::Gui; // Force no terminal. - showMessage(QString("Attaching to %1...").arg(attachParameters.attachPID.pid()), LogMisc); - QString errorMessage; - if (!launchCDB(attachParameters, &errorMessage)) { - showMessage(errorMessage, LogError); - Core::AsynchronousMessageBox::critical(tr("Failed to Start the Debugger"), errorMessage); - STATE_DEBUG(state(), Q_FUNC_INFO, __LINE__, "notifyEngineSetupFailed") - notifyEngineSetupFailed(); - } + sp.inferior.executable.clear(); + sp.inferior.commandLineArguments.clear(); + sp.attachPID = ProcessHandle(terminal()->applicationPid()); + sp.startMode = AttachExternal; + sp.inferior.runMode = ApplicationLauncher::Gui; // Force no terminal. + showMessage(QString("Attaching to %1...").arg(sp.attachPID.pid()), LogMisc); } else { - m_effectiveStartMode = rp.startMode; - const bool ok = launchCDB(runParameters(), &errorMessage); - if (debug) - qDebug(" -#include -#include -#include -#include #include -#include - namespace Debugger { namespace Internal { -class DisassemblerAgent; class CdbCommand; struct MemoryViewCookie; class StringInputStream; -class GdbMi; class CdbEngine : public DebuggerEngine { @@ -156,7 +148,6 @@ private: ScriptCommand }; - bool startConsole(const DebuggerRunParameters &sp, QString *errorMessage); void init(); unsigned examineStopReason(const GdbMi &stopReason, QString *message, QString *exceptionBoxMessage, @@ -165,7 +156,6 @@ private: bool commandsPending() const; void handleExtensionMessage(char t, int token, const QString &what, const QString &message); bool doSetupEngine(QString *errorMessage); - bool launchCDB(const DebuggerRunParameters &sp, QString *errorMessage); void handleSessionAccessible(unsigned long cdbExState); void handleSessionInaccessible(unsigned long cdbExState); void handleSessionIdle(const QString &message); @@ -216,6 +206,7 @@ private: void mergeStartParametersSourcePathMap(); const QString m_tokenPrefix; + void handleSetupFailure(const QString &errorMessage); QProcess m_process; DebuggerStartMode m_effectiveStartMode = NoStartMode;