diff --git a/src/plugins/debugger/dap/cmakedapengine.cpp b/src/plugins/debugger/dap/cmakedapengine.cpp index 3e7a23cb243..769fe248238 100644 --- a/src/plugins/debugger/dap/cmakedapengine.cpp +++ b/src/plugins/debugger/dap/cmakedapengine.cpp @@ -9,6 +9,7 @@ #include +#include #include #include @@ -23,6 +24,11 @@ using namespace Core; using namespace Utils; +namespace { +const char CMAKE_MIMETYPE[] = "text/x-cmake"; +const char CMAKE_PROJECT_MIMETYPE[] = "text/x-cmake-project"; +} // namespace + namespace Debugger::Internal { class LocalSocketDataProvider : public IDataProvider @@ -144,7 +150,8 @@ void CMakeDapEngine::setupEngine() bool CMakeDapEngine::acceptsBreakpoint(const BreakpointParameters &bp) const { - return bp.fileName.endsWith(".txt") || bp.fileName.endsWith(".cmake"); + const auto mimeType = Utils::mimeTypeForFile(bp.fileName); + return mimeType.matchesName(CMAKE_MIMETYPE) || mimeType.matchesName(CMAKE_PROJECT_MIMETYPE); } bool CMakeDapEngine::hasCapability(unsigned cap) const @@ -153,7 +160,7 @@ bool CMakeDapEngine::hasCapability(unsigned cap) const | BreakConditionCapability | ShowModuleSymbolsCapability /*| AddWatcherCapability*/ // disable while the #25282 bug is not fixed - /*| RunToLineCapability*/); // disable while the #25176 bug is not fixed + | RunToLineCapability); } const QLoggingCategory &CMakeDapEngine::logCategory() diff --git a/src/plugins/debugger/dap/dapengine.cpp b/src/plugins/debugger/dap/dapengine.cpp index e71c2aa4c9f..5c6de71777d 100644 --- a/src/plugins/debugger/dap/dapengine.cpp +++ b/src/plugins/debugger/dap/dapengine.cpp @@ -734,6 +734,8 @@ void DapEngine::handleBreakpointResponse(const QJsonObject &response) parameters.pending = false; bp->setParameters(parameters); notifyBreakpointInsertOk(bp); + if (parameters.oneShot) + continueInferior(); } if (!bp.isNull()) bp->setResponseId(QString::number(map.value(mapKey).value("id").toInt())); @@ -783,6 +785,8 @@ void DapEngine::handleBreakpointResponse(const QJsonObject &response) bp->setParameters(parameters); bp->setResponseId(QString::number(jsonBreakpoint.value("id").toInt())); notifyBreakpointInsertOk(bp); + if (parameters.oneShot) + continueInferior(); map.remove(key); } } @@ -841,7 +845,7 @@ void DapEngine::handleStoppedEvent(const QJsonObject &event) const BreakpointParameters ¶ms = bp->requestedParameters(); gotoLocation(Location(params.fileName, params.textPosition)); if (params.oneShot) - removeBreakpoint(bp); + bp->globalBreakpoint()->deleteBreakpoint(); } } diff --git a/src/plugins/debugger/dap/gdbdapengine.cpp b/src/plugins/debugger/dap/gdbdapengine.cpp index fd944e91151..1b208924e85 100644 --- a/src/plugins/debugger/dap/gdbdapengine.cpp +++ b/src/plugins/debugger/dap/gdbdapengine.cpp @@ -9,6 +9,7 @@ #include +#include #include #include @@ -22,6 +23,13 @@ using namespace Core; using namespace Utils; +namespace { +const char C_HEADER_MIMETYPE[] = "text/x-chdr"; +const char C_SOURCE_MIMETYPE[] = "text/x-csrc"; +const char CPP_SOURCE_MIMETYPE[] = "text/x-c++src"; +const char CPP_HEADER_MIMETYPE[] = "text/x-c++hdr"; +} // namespace + namespace Debugger::Internal { class ProcessDataProvider : public IDataProvider @@ -163,7 +171,10 @@ void GdbDapEngine::setupEngine() bool GdbDapEngine::acceptsBreakpoint(const BreakpointParameters &bp) const { - return bp.fileName.endsWith(".cpp") || bp.fileName.endsWith(".h"); + const auto mimeType = Utils::mimeTypeForFile(bp.fileName); + return mimeType.matchesName(C_HEADER_MIMETYPE) || mimeType.matchesName(C_SOURCE_MIMETYPE) + || mimeType.matchesName(CPP_HEADER_MIMETYPE) + || mimeType.matchesName(CPP_SOURCE_MIMETYPE); } const QLoggingCategory &GdbDapEngine::logCategory() diff --git a/src/plugins/debugger/dap/pydapengine.cpp b/src/plugins/debugger/dap/pydapengine.cpp index 37b5712b518..9f59d05f9ea 100644 --- a/src/plugins/debugger/dap/pydapengine.cpp +++ b/src/plugins/debugger/dap/pydapengine.cpp @@ -12,6 +12,7 @@ #include #include +#include #include #include @@ -26,6 +27,13 @@ using namespace Core; using namespace Utils; +namespace { +const char C_PY_MIMETYPE[] = "text/x-python"; +const char C_PY_GUI_MIMETYPE[] = "text/x-python-gui"; +const char C_PY3_MIMETYPE[] = "text/x-python3"; +const char C_PY_MIME_ICON[] = "text-x-python"; +} // namespace + namespace Debugger::Internal { const char installDebugPyInfoBarId[] = "Python::InstallDebugPy"; @@ -199,16 +207,6 @@ void PyDapEngine::quitDebugger() DebuggerEngine::quitDebugger(); } -bool PyDapEngine::acceptsBreakpoint(const BreakpointParameters &bp) const -{ - return bp.fileName.endsWith(".py"); -} - -bool PyDapEngine::isLocalAttachEngine() const -{ - return runParameters().startMode == AttachToLocalProcess; -} - void PyDapEngine::setupEngine() { QTC_ASSERT(state() == EngineSetupRequested, qDebug() << state()); @@ -265,6 +263,18 @@ void PyDapEngine::setupEngine() m_dapClient->dataProvider()->start(); } +bool PyDapEngine::acceptsBreakpoint(const BreakpointParameters &bp) const +{ + const auto mimeType = Utils::mimeTypeForFile(bp.fileName); + return mimeType.matchesName(C_PY3_MIMETYPE) || mimeType.matchesName(C_PY_GUI_MIMETYPE) + || mimeType.matchesName(C_PY_MIMETYPE) || mimeType.matchesName(C_PY_MIME_ICON); +} + +bool PyDapEngine::isLocalAttachEngine() const +{ + return runParameters().startMode == AttachToLocalProcess; +} + const QLoggingCategory &PyDapEngine::logCategory() { static const QLoggingCategory logCategory = QLoggingCategory("qtc.dbg.dapengine.python",