V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
a33291
V2EX  ›  问与答

请教一下各位 vscode 配置 c/c++开发调试环境(msys2)的问题

  •  
  •   a33291 · 107 天前 · 391 次点击
    这是一个创建于 107 天前的主题,其中的信息可能已经有所发展或是发生改变。

    前提

    1. 当前系统已安装 msys2
    2. 已安装 vscode 和 c/c++扩展包
    3. 已通过配置添加 msys2 的环境变量

    然后是工作区配置如下
    launch.json

    {
        // Use IntelliSense to learn about possible attributes.
        // Hover to view descriptions of existing attributes.
        // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
        "version": "0.2.0",
        "configurations": [
            {
                "name": "gcc.exe - Build and debug active file",
                "type": "cppdbg",
                "request": "launch",
                "program": "${fileDirname}\\${fileBasenameNoExtension}.exe",
                "args": [],
                "stopAtEntry": false,
                "cwd": "${fileDirname}",
                "environment": [],
                "externalConsole": false,
                "MIMode": "gdb",
                "miDebuggerPath": "gdb.exe",
                "setupCommands": [
                    {
                        "description": "Enable pretty-printing for gdb",
                        "text": "-enable-pretty-printing",
                        "ignoreFailures": true
                    }
                ],
                "preLaunchTask": "C/C++: gcc.exe build active file"
            }
        ]
    }
    
    

    tasks.json

    {
        "tasks": [
            {
                "type": "cppbuild",
                "label": "C/C++: gcc.exe build active file",
                "command": "g++.exe",
                "args": [
                    "-fdiagnostics-color=always",
                    "-g",
                    "${file}",
                    "-o",
                    "${fileDirname}\\${fileBasenameNoExtension}.exe"
                ],
                "options": {
                    "cwd": "${fileDirname}"
                },
                "problemMatcher": [
                    "$gcc"
                ],
                "group": {
                    "kind": "build",
                    "isDefault": true
                },
                "detail": "Task generated by Debugger."
            }
        ],
        "version": "2.0.0"
    }
    

    测试代码

    #include <stdlib.h>
    #include <stdio.h>
    
    //__declspec(dllimport) int __cdecl Add(int a, int b);
    
    int main(int argc, char **argv)
    {
      // printf("%d\n", Add(6, 23));
      printf("hello world");
      return EXIT_SUCCESS;
    }
    

    当执行 F5 时,终端会乱码并提示错误 image.png

    但如果直接复制构建命令并在终端执行,是没问题的 image.png

    已按照官方的说明文档 Using GCC with MinGW 对比过配置,没看出来问题.也百度过类似问题但都不是我这种情况.

    请问各位大佬又遇到类似的问题吗,如何解决呢?

    5 条回复    2022-08-21 23:55:43 +08:00
    cwaken
        1
    cwaken  
       106 天前 via iPhone
    你上 cmake 啊
    a33291
        2
    a33291  
    OP
       106 天前
    当前问题和 cmake 关系不大,我不想引入新的变量.

    此问题已提交至 VSCode 官方仓库,并且在后续尝试中发现通过设定系统级 PATH 可以解决此问题,详情见
    https://github.com/microsoft/vscode-cpptools/issues/9756

    之前是仅在 VSCode 里修改了终端 PATH 以包含 mingw 环境,但是 C/C++扩展的构建终端应该没有继承这个 PATH,所以出现编译乱码以及相关错误.
    感兴趣的可以跟进后续官方的处理
    ysc3839
        3
    ysc3839  
       106 天前 via Android
    那堆乱码盲猜是“不是内部或外部命令”。
    一般不建议把 MSYS2 的 bin 加进系统 PATH ,可以试试在 vscode 里写完整的 gcc.exe 路径。
    a33291
        4
    a33291  
    OP
       106 天前
    是的,我也是这么想的,所以并不想将 msys 的路径加到系统 PATH 里.我的做法是加到 VSCode 的终端 PATH 里,也就是在 settings.json 里加上这个配置

    "terminal.integrated.env.windows": {
    "PATH": "D:\\Env\\msys64\\usr\\bin;D:\\Env\\msys64\\mingw64\\bin;${env:PATH}"
    }

    加上这个配置后,能够在 VSCode 的终端里调用 gcc/g++等(无需全路径),只是 F5 的时候他会报错.然后如果仅在 launch.json 里填写 gcc/g++的全路径的话,会报找不到依赖 dll(编译工具本身的依赖)之类的错误,所以不能单独写全路径.我期望他是使用 settings.json 里配置的 PATH 这样就不用修改系统 PATH,但是目前他不认这个.

    看 issue 里后续官方如何处理了
    youngxinler
        5
    youngxinler  
       105 天前 via iPhone
    重启一下 vscode 试试?
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2343 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 39ms · UTC 16:15 · PVG 00:15 · LAX 08:15 · JFK 11:15
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.