From a4d7fb2f0612643ef4dc8e8c33d4bc03dbf0b0fc Mon Sep 17 00:00:00 2001 From: Friedemann Kleint <Friedemann.Kleint@nokia.com> Date: Fri, 26 Nov 2010 13:06:03 +0100 Subject: [PATCH] Debugger: Fix compilation, centralize breakpoint type detection. Reviewed-by: hjk --- src/plugins/debugger/cdb/cdbengine.cpp | 19 ++++++++++++++++++- src/plugins/debugger/cdb/cdbengine.h | 2 ++ src/plugins/debugger/cdb2/cdbengine2.cpp | 17 +++++++++++++++++ src/plugins/debugger/cdb2/cdbengine2.h | 2 ++ src/plugins/debugger/debuggerengine.cpp | 9 +++++++++ src/plugins/debugger/debuggerengine.h | 2 ++ src/plugins/debugger/debuggerrunner.cpp | 4 ++-- .../debugger/gdb/abstractgdbadapter.cpp | 2 +- src/plugins/debugger/gdb/gdbengine.cpp | 6 ++---- src/plugins/debugger/qml/qmlengine.cpp | 4 +--- 10 files changed, 56 insertions(+), 11 deletions(-) diff --git a/src/plugins/debugger/cdb/cdbengine.cpp b/src/plugins/debugger/cdb/cdbengine.cpp index 8f8d077f90a..e7ac916d461 100644 --- a/src/plugins/debugger/cdb/cdbengine.cpp +++ b/src/plugins/debugger/cdb/cdbengine.cpp @@ -1197,6 +1197,23 @@ void CdbEngine::selectThread(int index) } } +bool CdbEngine::stateAcceptsBreakpointChanges() const +{ + switch (state()) { + case InferiorRunOk: + case InferiorStopOk: + return true; + default: + break; + } + return false; +} + +bool CdbEngine::acceptsBreakpoint(BreakpointId id) const +{ + return DebuggerEngine::isCppBreakpoint(breakHandler()->breakpointData(id)); +} + void CdbEngine::attemptBreakpointSynchronization() { if (!m_d->m_hDebuggeeProcess) // Sometimes called from the breakpoint Window @@ -1751,7 +1768,7 @@ void CdbEnginePrivate::updateStackTrace() void CdbEnginePrivate::updateModules() { - QList<Module> modules; + Modules modules; QString errorMessage; if (!getModuleList(interfaces().debugSymbols, &modules, &errorMessage)) m_engine->warning(msgFunctionFailed(Q_FUNC_INFO, errorMessage)); diff --git a/src/plugins/debugger/cdb/cdbengine.h b/src/plugins/debugger/cdb/cdbengine.h index 9fd5208cea6..24fab492a85 100644 --- a/src/plugins/debugger/cdb/cdbengine.h +++ b/src/plugins/debugger/cdb/cdbengine.h @@ -83,6 +83,8 @@ public: virtual void activateFrame(int index); virtual void selectThread(int index); + virtual bool stateAcceptsBreakpointChanges() const; + virtual bool acceptsBreakpoint(BreakpointId id) const; virtual void attemptBreakpointSynchronization(); virtual void setRegisterValue(int regnr, const QString &value); diff --git a/src/plugins/debugger/cdb2/cdbengine2.cpp b/src/plugins/debugger/cdb2/cdbengine2.cpp index 2ca9a82602b..06e7e0f8d55 100644 --- a/src/plugins/debugger/cdb2/cdbengine2.cpp +++ b/src/plugins/debugger/cdb2/cdbengine2.cpp @@ -1669,6 +1669,23 @@ static inline BreakPointSyncType breakPointSyncType(const BreakHandler *handler, return added ? BreakpointsAdded : BreakpointsUnchanged; } +bool CdbEngine::stateAcceptsBreakpointChanges() const +{ + switch (state()) { + case InferiorRunOk: + case InferiorStopOk: + return true; + default: + break; + } + return false; +} + +bool CdbEngine::acceptsBreakpoint(BreakpointId id) const +{ + return DebuggerEngine::isCppBreakpoint(breakHandler()->breakpointData(id)); +} + void CdbEngine::attemptBreakpointSynchronization() { // Check if there is anything to be done at all. diff --git a/src/plugins/debugger/cdb2/cdbengine2.h b/src/plugins/debugger/cdb2/cdbengine2.h index 669805b8259..fb18021005e 100644 --- a/src/plugins/debugger/cdb2/cdbengine2.h +++ b/src/plugins/debugger/cdb2/cdbengine2.h @@ -101,6 +101,8 @@ public: virtual void activateFrame(int index); virtual void selectThread(int index); + virtual bool stateAcceptsBreakpointChanges() const; + virtual bool acceptsBreakpoint(BreakpointId id) const; virtual void attemptBreakpointSynchronization(); virtual void fetchDisassembler(Debugger::Internal::DisassemblerViewAgent *agent); diff --git a/src/plugins/debugger/debuggerengine.cpp b/src/plugins/debugger/debuggerengine.cpp index d198a9a7256..5a2e147f07a 100644 --- a/src/plugins/debugger/debuggerengine.cpp +++ b/src/plugins/debugger/debuggerengine.cpp @@ -1403,6 +1403,15 @@ void DebuggerEngine::showStoppedByExceptionMessageBox(const QString &description showMessageBox(QMessageBox::Information, tr("Exception Triggered"), msg); } +bool DebuggerEngine::isCppBreakpoint(const BreakpointParameters &p) +{ + // Qml is currently only file + if (p.type != BreakpointByFileAndLine) + return true; + return !p.fileName.endsWith(QLatin1String(".qml"), Qt::CaseInsensitive) + && !p.fileName.endsWith(QLatin1String(".js"), Qt::CaseInsensitive); +} + } // namespace Debugger #include "debuggerengine.moc" diff --git a/src/plugins/debugger/debuggerengine.h b/src/plugins/debugger/debuggerengine.h index af29b472770..a659a235fc6 100644 --- a/src/plugins/debugger/debuggerengine.h +++ b/src/plugins/debugger/debuggerengine.h @@ -345,6 +345,8 @@ protected: void showStoppedBySignalMessageBox(const QString meaning, QString name); void showStoppedByExceptionMessageBox(const QString &description); + static bool isCppBreakpoint(const Internal::BreakpointParameters &p); + private: // Wrapper engine needs access to state of its subengines. friend class QmlCppEngine; diff --git a/src/plugins/debugger/debuggerrunner.cpp b/src/plugins/debugger/debuggerrunner.cpp index 35d66861590..18cdc89ed30 100644 --- a/src/plugins/debugger/debuggerrunner.cpp +++ b/src/plugins/debugger/debuggerrunner.cpp @@ -344,7 +344,7 @@ DebuggerEngineType DebuggerRunControlPrivate::engineForExecutable // We need the CDB debugger in order to be able to debug VS // executables. - if (d->checkDebugConfiguration(ProjectExplorer::ToolChain_MSVC, + if (DebuggerRunControl::checkDebugConfiguration(ProjectExplorer::ToolChain_MSVC, &m_errorMessage, 0, &m_settingsIdHint)) { if (enabledEngineTypes & CdbEngineType) return CdbEngineType; @@ -372,7 +372,7 @@ DebuggerEngineType DebuggerRunControlPrivate::engineForMode if (startMode != AttachToRemote && (enabledEngineTypes & CdbEngineType)) return CdbEngineType; if (startMode == AttachCrashedExternal) { - m_errorMessage = tr("There is no debugging engine available for post-mortem debugging."); + m_errorMessage = DebuggerRunControl::tr("There is no debugging engine available for post-mortem debugging."); return NoEngineType; } return GdbEngineType; diff --git a/src/plugins/debugger/gdb/abstractgdbadapter.cpp b/src/plugins/debugger/gdb/abstractgdbadapter.cpp index 2454dde0edc..fa9dbbc39cd 100644 --- a/src/plugins/debugger/gdb/abstractgdbadapter.cpp +++ b/src/plugins/debugger/gdb/abstractgdbadapter.cpp @@ -87,7 +87,7 @@ bool AbstractGdbAdapter::prepareWinCommand() if (perr != Utils::QtcProcess::SplitOk) { // perr == BadQuoting is never returned on Windows // FIXME? QTCREATORBUG-2809 - m_engine->handleAdapterStartFailed(QApplication::translate("DebuggerEngine", // Same message in CdbEngine + m_engine->handleAdapterStartFailed(QCoreApplication::translate("DebuggerEngine", // Same message in CdbEngine "Debugging complex command lines is currently not supported under Windows"), QString()); return false; } diff --git a/src/plugins/debugger/gdb/gdbengine.cpp b/src/plugins/debugger/gdb/gdbengine.cpp index 4a9620c934b..9d5ebfff357 100644 --- a/src/plugins/debugger/gdb/gdbengine.cpp +++ b/src/plugins/debugger/gdb/gdbengine.cpp @@ -2568,9 +2568,7 @@ void GdbEngine::attemptBreakpointSynchronization() bool GdbEngine::acceptsBreakpoint(BreakpointId id) const { - const QString fileName = breakHandler()->fileName(id); - return !fileName.endsWith(QLatin1String("js")) - && !fileName.endsWith(QLatin1String("qml")); + return DebuggerEngine::isCppBreakpoint(breakHandler()->breakpointData(id)); } void GdbEngine::insertBreakpoint(BreakpointId id) @@ -2733,7 +2731,7 @@ void GdbEngine::handleShowModuleSymbols(const GdbResponse &response) foreach (const QByteArray &line, file.readAll().split('\n')) { if (line.isEmpty()) continue; - if (!line.at(0) == '[') + if (line.at(0) != '[') continue; int posCode = line.indexOf(']') + 2; int posAddress = line.indexOf("0x", posCode); diff --git a/src/plugins/debugger/qml/qmlengine.cpp b/src/plugins/debugger/qml/qmlengine.cpp index 0bd66f02ed7..11476be3002 100644 --- a/src/plugins/debugger/qml/qmlengine.cpp +++ b/src/plugins/debugger/qml/qmlengine.cpp @@ -496,9 +496,7 @@ void QmlEngine::attemptBreakpointSynchronization() bool QmlEngine::acceptsBreakpoint(BreakpointId id) const { - const QString fileName = breakHandler()->fileName(id); - return fileName.endsWith(QLatin1String(".qml")) - || fileName.endsWith(QLatin1String(".js")); + return !DebuggerEngine::isCppBreakpoint(breakHandler()->breakpointData(id)); } void QmlEngine::loadSymbols(const QString &moduleName) -- GitLab