为什么我的断点在 CLion 中没有命中?

Why are my breakpoints not hit in CLion?

我正在尝试调试使用 CMake 配置创建的可执行文件

SET(CMAKE_BUILD_TYPE Debug)

但是,CLion 没有遇到任何断点。可能是什么问题?

事实证明,可执行文件是使用以下 CMake 选项编译的(在脚本的下方):

SET(CMAKE_C_FLAGS_DEBUG "-D_DEBUG")

这破坏了 CLion 的调试功能(它也破坏了 gdb 的大部分调试功能)

我今天遇到了同样的问题。我发现项目的配置没有设置为 Debug。将配置设置为 Debug 后,所有断点都命中。

请确保您有以下配置:

  • Select 菜单项 Run/EditConfigurations
  • Select右边Target
  • Select Debug 作为 Configuration

现在应该命中断点了。

我也遇到了同样的问题。自 2016.3 以来,CLion 更改了 CMake 工作流程,因此一次只允许一种配置 clion new workflow

解决方案是文件 -> 设置 -> 构建、执行、部署 -> 更改构建配置

如果这对其他人有帮助,结果我的(有点尴尬)问题是我打的是 Run 而不是 Debug。所以在 运行 菜单中不要使用播放图标,而是选择可爱的错误图标。选择 运行 会导致它自动构建非调试版本,因此断点不起作用。一旦我开始选择错误图标,断点就像一个魅力。

我遇到了同样的问题。我注意到每次单击调试选项时,"Antimalware Service Executable" 进程都会启动。我在 windows Defender 中为 MinGW 文件夹创建了一个排除项,它运行良好...

2019.3结果是CLion/Preference/Build,Execution,Deployment/CMake/Build type/Debug.

就像minecrawler在github中说的,如果你的os是linux,你应该设置:

file/Settings/Build,执行,Deployment/Tllochains/Debugger 从捆绑的 GEB 或 gdb 到捆绑的 LLDB。

我试了,写出来了!

在我的例子中 (Linux / Ubuntu) 问题在某种程度上与挂载目录有关。 该项目最初是从 /media/username/ssd/repo/git/projectname 在 CLion 中打开的。断点总是被消息 No executable code is associated with this line.

禁用

然后我从符号链接目录打开同一个项目 ~/git -> /media/username/ssd/repo/git 断点开始正常工作。

在我的例子中,我的 CMake 选项 CMAKE_BUILD_TYPE 已经在 CMake 设置中设置为 DEBUG。但是,它是 CMakeLists.txt 中的命令集(CMAKE_BUILD_TYPE Release),它被 git pull 合并并在执行时覆盖了 CMake 设置。我之前无法弄清楚,因为 CMake 调试控制台显示 -DCMAKE_BUILD_TYPE=Debug

当我将其更改为 set(CMAKE_BUILD_TYPE Debug) 时,再次遇到断点。

我的项目路径中有一个逗号。删除逗号为我解决了问题。

我的问题是 -ffile-prefix-map 标志。一旦我删除它,一切正常。

https://youtrack.jetbrains.com/issue/CPP-23159 and https://youtrack.jetbrains.com/issue/CPP-15850

在我的例子中,我不得不编辑文件,以便重新编译所有内容,而不是使用缓存。

如果这对其他人有帮助:

在我的例子中,我必须在设置 -> 构建、执行、部署 -> CMake

中明确地将 -DCMAKE_BUILD_TYPE 选项设置为 Debug

在我的例子中,问题是忘记在 cmakelists 中注释掉优化选项 add_definitions(-O3)。让编译器去发布。

我有一个不同的问题导致我的断点没有被击中。我使用 CLion 开发嵌入式应用程序和本机 MacOS 控制台应用程序。对于嵌入式工作,需要为您选择的Preferences/Toolchains设置GDB。

对于调试控制台应用程序,需要在 Preferences/Toolchains 中选择 LLDB。如果它留在 GDB 上,我的断点不起作用。在此处设置为 LLDB: