forked from qt-creator/qt-creator
CMakePM: Add Debugger -> Start Debugging -> Start CMake Debugging
This is where the user would expect it. It is an action, so the user can assign a keyboard shortcut if needed. Change-Id: I4c6db3b1dafb5fb173a07c21d271715310a2b091 Reviewed-by: <github-actions-qt-creator@cristianadam.eu> Reviewed-by: Artem Sokolovskii <artem.sokolovskii@qt.io>
This commit is contained in:
@@ -11,6 +11,7 @@ const char CMAKE_PROJECT_MIMETYPE[] = "text/x-cmake-project";
|
|||||||
const char CMAKE_EDITOR_ID[] = "CMakeProject.CMakeEditor";
|
const char CMAKE_EDITOR_ID[] = "CMakeProject.CMakeEditor";
|
||||||
const char RUN_CMAKE[] = "CMakeProject.RunCMake";
|
const char RUN_CMAKE[] = "CMakeProject.RunCMake";
|
||||||
const char RUN_CMAKE_PROFILER[] = "CMakeProject.RunCMakeProfiler";
|
const char RUN_CMAKE_PROFILER[] = "CMakeProject.RunCMakeProfiler";
|
||||||
|
const char RUN_CMAKE_DEBUGGER[] = "CMakeProject.RunCMakeDebugger";
|
||||||
const char CLEAR_CMAKE_CACHE[] = "CMakeProject.ClearCache";
|
const char CLEAR_CMAKE_CACHE[] = "CMakeProject.ClearCache";
|
||||||
const char RESCAN_PROJECT[] = "CMakeProject.RescanProject";
|
const char RESCAN_PROJECT[] = "CMakeProject.RescanProject";
|
||||||
const char RUN_CMAKE_CONTEXT_MENU[] = "CMakeProject.RunCMakeContextMenu";
|
const char RUN_CMAKE_CONTEXT_MENU[] = "CMakeProject.RunCMakeContextMenu";
|
||||||
@@ -24,6 +25,7 @@ const char CMAKEFORMATTER_SETTINGS_GROUP[] = "CMakeFormatter";
|
|||||||
const char CMAKEFORMATTER_GENERAL_GROUP[] = "General";
|
const char CMAKEFORMATTER_GENERAL_GROUP[] = "General";
|
||||||
const char CMAKEFORMATTER_ACTION_ID[] = "CMakeFormatter.Action";
|
const char CMAKEFORMATTER_ACTION_ID[] = "CMakeFormatter.Action";
|
||||||
const char CMAKEFORMATTER_MENU_ID[] = "CMakeFormatter.Menu";
|
const char CMAKEFORMATTER_MENU_ID[] = "CMakeFormatter.Menu";
|
||||||
|
const char CMAKE_DEBUGGING_GROUP[] = "Debugger.Group.CMake";
|
||||||
|
|
||||||
const char PACKAGE_MANAGER_DIR[] = ".qtc/package-manager";
|
const char PACKAGE_MANAGER_DIR[] = ".qtc/package-manager";
|
||||||
|
|
||||||
|
|||||||
@@ -53,6 +53,7 @@ CMakeManager::CMakeManager()
|
|||||||
, m_reloadCMakePresetsAction(
|
, m_reloadCMakePresetsAction(
|
||||||
new QAction(Utils::Icons::RELOAD.icon(), Tr::tr("Reload CMake Presets"), this))
|
new QAction(Utils::Icons::RELOAD.icon(), Tr::tr("Reload CMake Presets"), this))
|
||||||
, m_cmakeProfilerAction(new QAction(QIcon(), Tr::tr("CMake Profiler"), this))
|
, m_cmakeProfilerAction(new QAction(QIcon(), Tr::tr("CMake Profiler"), this))
|
||||||
|
, m_cmakeDebuggerAction(new QAction(QIcon(), Tr::tr("Start CMake Debugging"), this))
|
||||||
{
|
{
|
||||||
Core::ActionContainer *mbuild =
|
Core::ActionContainer *mbuild =
|
||||||
Core::ActionManager::actionContainer(ProjectExplorer::Constants::M_BUILDPROJECT);
|
Core::ActionManager::actionContainer(ProjectExplorer::Constants::M_BUILDPROJECT);
|
||||||
@@ -64,6 +65,8 @@ CMakeManager::CMakeManager()
|
|||||||
Core::ActionManager::actionContainer(ProjectExplorer::Constants::M_FILECONTEXT);
|
Core::ActionManager::actionContainer(ProjectExplorer::Constants::M_FILECONTEXT);
|
||||||
Core::ActionContainer *manalyzer =
|
Core::ActionContainer *manalyzer =
|
||||||
Core::ActionManager::actionContainer(Debugger::Constants::M_DEBUG_ANALYZER);
|
Core::ActionManager::actionContainer(Debugger::Constants::M_DEBUG_ANALYZER);
|
||||||
|
Core::ActionContainer *mdebugger =
|
||||||
|
Core::ActionManager::actionContainer(ProjectExplorer::Constants::M_DEBUG_STARTDEBUGGING);
|
||||||
|
|
||||||
const Core::Context projectContext(CMakeProjectManager::Constants::CMAKE_PROJECT_ID);
|
const Core::Context projectContext(CMakeProjectManager::Constants::CMAKE_PROJECT_ID);
|
||||||
const Core::Context globalContext(Core::Constants::C_GLOBAL);
|
const Core::Context globalContext(Core::Constants::C_GLOBAL);
|
||||||
@@ -145,8 +148,32 @@ CMakeManager::CMakeManager()
|
|||||||
runCMakeWithProfiling(ProjectManager::startupBuildSystem());
|
runCMakeWithProfiling(ProjectManager::startupBuildSystem());
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// CMake Debugger
|
||||||
|
mdebugger->appendGroup(Constants::CMAKE_DEBUGGING_GROUP);
|
||||||
|
mdebugger->addSeparator(Core::Context(Core::Constants::C_GLOBAL),
|
||||||
|
Constants::CMAKE_DEBUGGING_GROUP,
|
||||||
|
&m_cmakeDebuggerSeparator);
|
||||||
|
|
||||||
|
command = Core::ActionManager::registerAction(m_cmakeDebuggerAction,
|
||||||
|
Constants::RUN_CMAKE_DEBUGGER,
|
||||||
|
globalContext);
|
||||||
|
command->setDescription(m_cmakeDebuggerAction->text());
|
||||||
|
mdebugger->addAction(command, Constants::CMAKE_DEBUGGING_GROUP);
|
||||||
|
connect(m_cmakeDebuggerAction, &QAction::triggered, this, [] {
|
||||||
|
ProjectExplorerPlugin::runStartupProject(ProjectExplorer::Constants::DAP_CMAKE_DEBUG_RUN_MODE,
|
||||||
|
false);
|
||||||
|
});
|
||||||
|
|
||||||
connect(ProjectManager::instance(), &ProjectManager::startupProjectChanged, this, [this] {
|
connect(ProjectManager::instance(), &ProjectManager::startupProjectChanged, this, [this] {
|
||||||
updateCmakeActions(ProjectTree::currentNode());
|
updateCmakeActions(ProjectTree::currentNode());
|
||||||
|
|
||||||
|
auto cmakeBuildSystem = static_cast<CMakeBuildSystem*>(ProjectManager::startupBuildSystem());
|
||||||
|
if (cmakeBuildSystem) {
|
||||||
|
const BuildDirParameters parameters(cmakeBuildSystem);
|
||||||
|
const auto tool = parameters.cmakeTool();
|
||||||
|
CMakeTool::Version version = tool ? tool->version() : CMakeTool::Version();
|
||||||
|
m_canDebugCMake = (version.major == 3 && version.minor >= 27) || version.major > 3;
|
||||||
|
}
|
||||||
});
|
});
|
||||||
connect(BuildManager::instance(), &BuildManager::buildStateChanged, this, [this] {
|
connect(BuildManager::instance(), &BuildManager::buildStateChanged, this, [this] {
|
||||||
updateCmakeActions(ProjectTree::currentNode());
|
updateCmakeActions(ProjectTree::currentNode());
|
||||||
@@ -169,6 +196,9 @@ void CMakeManager::updateCmakeActions(Node *node)
|
|||||||
m_rescanProjectAction->setVisible(visible);
|
m_rescanProjectAction->setVisible(visible);
|
||||||
m_cmakeProfilerAction->setEnabled(visible);
|
m_cmakeProfilerAction->setEnabled(visible);
|
||||||
|
|
||||||
|
m_cmakeDebuggerAction->setEnabled(m_canDebugCMake && visible);
|
||||||
|
m_cmakeDebuggerSeparator->setVisible(m_canDebugCMake && visible);
|
||||||
|
|
||||||
const bool reloadPresetsVisible = [project] {
|
const bool reloadPresetsVisible = [project] {
|
||||||
if (!project)
|
if (!project)
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
@@ -41,6 +41,9 @@ private:
|
|||||||
QAction *m_reloadCMakePresetsAction;
|
QAction *m_reloadCMakePresetsAction;
|
||||||
Utils::ParameterAction *m_buildFileAction;
|
Utils::ParameterAction *m_buildFileAction;
|
||||||
QAction *m_cmakeProfilerAction;
|
QAction *m_cmakeProfilerAction;
|
||||||
|
QAction *m_cmakeDebuggerAction;
|
||||||
|
QAction *m_cmakeDebuggerSeparator;
|
||||||
|
bool m_canDebugCMake = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace Internal
|
} // namespace Internal
|
||||||
|
|||||||
Reference in New Issue
Block a user