V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
zeal7s
V2EX  ›  程序员

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

  •  
  •   zeal7s · 2021-11-02 10:37:22 +08:00 · 2086 次点击
    这是一个创建于 904 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    Capture1.PNG

    另外补充四点:

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

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

    以下是我的 CLion Toolchains 设置

    Capture2.PNG

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

    13 条回复    2021-11-03 10:27:31 +08:00
    kokutou
        1
    kokutou  
       2021-11-02 10:42:58 +08:00
    debugger 是 lldb 啊
    有换的吗
    zeal7s
        2
    zeal7s  
    OP
       2021-11-02 10:49:56 +08:00
    @kokutou debugger 下拉菜单只有自带的 LLDB
    zeal7s
        3
    zeal7s  
    OP
       2021-11-02 10:51:43 +08:00
    @kokutou 看文档 https://www.jetbrains.com/help/clion/configuring-debugger-options.html#gdb-config 是有带 GDB 的,不知道为啥我这儿没有
    MoYi123
        4
    MoYi123  
       2021-11-02 10:59:06 +08:00
    我用的 cygwin,没问题. debugger 是 cygwin GDB
    zeal7s
        5
    zeal7s  
    OP
       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
        6
    zeal7s  
    OP
       2021-11-02 11:06:32 +08:00
    @MoYi123 其实还是想把 MSVC 环境给配好
    zeal7s
        7
    zeal7s  
    OP
       2021-11-02 11:15:07 +08:00
    92 行报错的代码在这:
    ![Capture3.PNG]( https://i.loli.net/2021/11/02/sD6uONcZTKgrx3P.png)
    kokutou
        8
    kokutou  
       2021-11-02 11:19:31 +08:00
    @zeal7s #3
    装个 msys2
    https://www.msys2.org/
    然后用 pacman 命令装个 gdb
    试试吧。
    sky96111
        9
    sky96111  
       2021-11-02 12:58:28 +08:00
    @kokutou 用 MSVC 就只能用内置的 lldb ,即使用 msys 装了 gdb 也要把编译器也换成 gcc 才能用
    weiceshi
        10
    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
        11
    alexkkaa  
       2021-11-02 13:45:29 +08:00 via Android
    Gcc+gdb
    zeal7s
        12
    zeal7s  
    OP
       2021-11-02 22:12:57 +08:00
    @weiceshi 感谢大佬,解开了困扰我一整晚的疑惑
    CLion 也太奇葩了,感觉这个明显是个 bug 。
    zeal7s
        13
    zeal7s  
    OP
       2021-11-03 10:27:31 +08:00
    看了一眼 Mac 上的 CLion 2021.2 ,根本没用 NatVis renderers for LLDB ,难怪没有这个问题
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1216 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 18:14 · PVG 02:14 · LAX 11:14 · JFK 14:14
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.