vscode 远程WSL(ubuntu) 调试C

近期被数据结构折磨,要重拾C,电脑已经跑不起新版VS,所以用一直开发使用的vscode,就加个编译和调试环境,又可以拿来写C了,完美!

得益于vscode新版的远程连接WSL,并不采用网上千篇一律的MinGW或Cygwin。

vscode 远程WSL(ubuntu) 调试C_第1张图片

 以及C/C++的插件

vscode 远程WSL(ubuntu) 调试C_第2张图片

windows系统已经有初始化可用的WSL,并装上g++或gcc,以及gdb

vscode 远程WSL(ubuntu) 调试C_第3张图片

 vscode点击左下角的双箭头,选择Remote-WSL: New Window(进到WSL用户路径,需要项目在WSL里)或Remote-WSL: Reopen Folder in WSL(在打开当前电脑的项目时,连接WSL后路径转换成对应的/mnt/···)

vscode 远程WSL(ubuntu) 调试C_第4张图片

 调试和编译主要需要两个配置文件,launch.json和tasks.json(编译任务)文件

{
    //launch.json
    "version": "0.2.0",
    "configurations": [        
        {
            "name": "(gdb) Launch",
            "type": "cppdbg",
            "request": "launch",
            "preLaunchTask": "build",//调用编译任务
            "program": "${workspaceFolder}/a.out",//指当前的目录下的a.out
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": false,//是否另窗口调试,WSL就选false
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ]
        }

    ]
}

tasks.json ,g++编译时不指定编译后的文件名最后生成是a.out

{
    //tasks.json
    "version": "2.0.0",
    "tasks": [
        {
            "label": "build",
            "command": "g++",
            "args": [ //传递参数 最终和command生成例如:g++ -g 当前文件.c -std=c++17
                "-g",
                "${file}",
                "-std=c++17",//使用c17的标准
            ],
        }
    ]
}

然后回到项目文件,F5

vscode 远程WSL(ubuntu) 调试C_第5张图片

 最开始会在终端中执行“任务 - build”,切换到cppdbg: a.out进行打印和输入,就是相当以前的VS小黑窗,"externalConsole": false 的情况就是这样,true就是小黑窗,但设true跳不出来??真实linux环境下跳得出来

vscode 远程WSL(ubuntu) 调试C_第6张图片

 

用到WSL是因为有些其他开发环境用到,所以在已有WSL下就不想再装MinGW和Cygwin,这个远程连接WSL实际是让当前Windows的vscode运行在linux环境下,所以linux使用vscode调试C/C++也是这样如法炮制的配置。

在不想用旧的版本的VS(跑不动新版本),又想愉快的开发。还是选vscode爽啊。。

你可能感兴趣的:(Linux,WSL,vscode,C/C++)