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 RUN_CMAKE[] = "CMakeProject.RunCMake";
|
||||
const char RUN_CMAKE_PROFILER[] = "CMakeProject.RunCMakeProfiler";
|
||||
const char RUN_CMAKE_DEBUGGER[] = "CMakeProject.RunCMakeDebugger";
|
||||
const char CLEAR_CMAKE_CACHE[] = "CMakeProject.ClearCache";
|
||||
const char RESCAN_PROJECT[] = "CMakeProject.RescanProject";
|
||||
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_ACTION_ID[] = "CMakeFormatter.Action";
|
||||
const char CMAKEFORMATTER_MENU_ID[] = "CMakeFormatter.Menu";
|
||||
const char CMAKE_DEBUGGING_GROUP[] = "Debugger.Group.CMake";
|
||||
|
||||
const char PACKAGE_MANAGER_DIR[] = ".qtc/package-manager";
|
||||
|
||||
|
||||
@@ -53,6 +53,7 @@ CMakeManager::CMakeManager()
|
||||
, m_reloadCMakePresetsAction(
|
||||
new QAction(Utils::Icons::RELOAD.icon(), Tr::tr("Reload CMake Presets"), 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::ActionManager::actionContainer(ProjectExplorer::Constants::M_BUILDPROJECT);
|
||||
@@ -64,6 +65,8 @@ CMakeManager::CMakeManager()
|
||||
Core::ActionManager::actionContainer(ProjectExplorer::Constants::M_FILECONTEXT);
|
||||
Core::ActionContainer *manalyzer =
|
||||
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 globalContext(Core::Constants::C_GLOBAL);
|
||||
@@ -145,8 +148,32 @@ CMakeManager::CMakeManager()
|
||||
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] {
|
||||
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] {
|
||||
updateCmakeActions(ProjectTree::currentNode());
|
||||
@@ -169,6 +196,9 @@ void CMakeManager::updateCmakeActions(Node *node)
|
||||
m_rescanProjectAction->setVisible(visible);
|
||||
m_cmakeProfilerAction->setEnabled(visible);
|
||||
|
||||
m_cmakeDebuggerAction->setEnabled(m_canDebugCMake && visible);
|
||||
m_cmakeDebuggerSeparator->setVisible(m_canDebugCMake && visible);
|
||||
|
||||
const bool reloadPresetsVisible = [project] {
|
||||
if (!project)
|
||||
return false;
|
||||
|
||||
@@ -41,6 +41,9 @@ private:
|
||||
QAction *m_reloadCMakePresetsAction;
|
||||
Utils::ParameterAction *m_buildFileAction;
|
||||
QAction *m_cmakeProfilerAction;
|
||||
QAction *m_cmakeDebuggerAction;
|
||||
QAction *m_cmakeDebuggerSeparator;
|
||||
bool m_canDebugCMake = false;
|
||||
};
|
||||
|
||||
} // namespace Internal
|
||||
|
||||
Reference in New Issue
Block a user