Windows 上的 Clion 遇到了一个奇怪的问题

2021-11-02 10:37:22 +08:00
 zeal7s

使用的环境是 Windows 10 + Visual Studio 2019 Community + CLion 2021.2.3 就是很简单的一个 vector 逆序遍历,代码和单步调试时执行完毕 while 循环报错如下图所示

另外补充四点:

  1. 正常执行时不会报错,只有单步调试时会报错
  2. 把该代码放到 Vistual Studio 中无论正常运行还是单步调试都不会报错
  3. 如果在 CLion 中把第 9 行i = *rIter注释掉,那么单步调式不会报错
  4. 如果把遍历改成正序遍历,CLion 单步调试也会出错

根据以上现象,感觉很有可能是 CLion 的问题。

以下是我的 CLion Toolchains 设置

有在 Windows 上也用 CLion 的大佬可以帮我看看吗?

2103 次点击
所在节点    程序员
13 条回复
kokutou
2021-11-02 10:42:58 +08:00
debugger 是 lldb 啊
有换的吗
zeal7s
2021-11-02 10:49:56 +08:00
@kokutou debugger 下拉菜单只有自带的 LLDB
zeal7s
2021-11-02 10:51:43 +08:00
@kokutou 看文档 https://www.jetbrains.com/help/clion/configuring-debugger-options.html#gdb-config 是有带 GDB 的,不知道为啥我这儿没有
MoYi123
2021-11-02 10:59:06 +08:00
我用的 cygwin,没问题. debugger 是 cygwin GDB
zeal7s
2021-11-02 11:05:54 +08:00
@MoYi123 尝试配置了 mingw-w64 环境,mingw gdb 直接给我报错,遇到了网上一样的问题 https://intellij-support.jetbrains.com/hc/en-us/community/posts/360010806440
zeal7s
2021-11-02 11:06:32 +08:00
@MoYi123 其实还是想把 MSVC 环境给配好
zeal7s
2021-11-02 11:15:07 +08:00
92 行报错的代码在这:
![Capture3.PNG]( https://i.loli.net/2021/11/02/sD6uONcZTKgrx3P.png)
kokutou
2021-11-02 11:19:31 +08:00
@zeal7s #3
装个 msys2
https://www.msys2.org/
然后用 pacman 命令装个 gdb
试试吧。
sky96111
2021-11-02 12:58:28 +08:00
@kokutou 用 MSVC 就只能用内置的 lldb ,即使用 msys 装了 gdb 也要把编译器也换成 gcc 才能用
weiceshi
2021-11-02 13:20:34 +08:00
解决方法:
Settings -> Build, Execution, Deployment -> Debugger -> Data Views -> C/C++ -> **uncheck** Enable NatVis renderers for LLDB


下面是原因,可以不用看
原因:

Debugger 激进取值,在迭代器每次递增后,会立即取值并显示在 IDE 上
最后一次迭代后,代码中虽然通过判断 == rbegin() 跳出,但是 Debugger 依然尝试了一次取值,所以弹了越界警告

最终解决方法:
在 Windows 上开发 C++ ,永远不要使用 VS 之外的任何 IDE
alexkkaa
2021-11-02 13:45:29 +08:00
Gcc+gdb
zeal7s
2021-11-02 22:12:57 +08:00
@weiceshi 感谢大佬,解开了困扰我一整晚的疑惑
CLion 也太奇葩了,感觉这个明显是个 bug 。
zeal7s
2021-11-03 10:27:31 +08:00
看了一眼 Mac 上的 CLion 2021.2 ,根本没用 NatVis renderers for LLDB ,难怪没有这个问题

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/812371

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX