在Win10中,配置VScode调试Linux环境下的C语言的代码,配置过程不太常用,特此记录下。

1、源码文件,都一样,怎么写看个人爱好。

2、VSCode安装这里也不做赘述。VSCode默认安装好是使用的英文,想要中文界面,可以在扩展中安装中文语言包就可以了,如下图:

 

 安装完成后,会提示重启,按照提示操作即可。

3、安装远程插件并配置

        由于Window上编译Linux系统下的代码,因此可将Linux看作是另外一台电脑,不管是不是虚拟机,容器之类的,或者说Windows 10 上通过Windows商店安装的Ubuntu系统,只要能通过ssh远程连接,就可以通过VSCode来远程调试,因此VSCode需要安装远程插件,在插件搜索框搜索Remote SSH,将下图中选中的插件都安装上,其他相应插件会自动安装。

        

 然后点击左边栏上的如下图红圈中的图标,即远程连接管理的图标:

然后点击SSH TARGETS左边的箭头展开后点击右边的加号”+“,如下图:

 

 然后会弹出如下图的提示:

在框里面按照在命令行上输入ssh命令的格式输入,有一点不同的时,如果Linux系统的ssh服务端口不是默认端口(22)的话,需要指定端口,指定端口只需在IP地址后面加上冒号再加端口即可,不用像命令行上一样加参数p来指定端口,如下图:

 

 2222为Linux系统上设置的ssh端口,可查看/etc/ssh/sshd_config中的port参数。

回车后,即可在左边的SSH TARGETS下面看到一个指定IP的远程连接,此时可以在对应IP上右键选择进行连接,如下图:

点击后会弹出输入密码的提示,如下图:

 在下面一行输入密码即可连接到对应的Linux系统。

会弹出config文件列表,选择第一个:

选择刚配置好的服务器,提示选择的系统,根据你自己的系统进行选择即可:

 连接到Linux后,再按下图所示选择打开文件夹:

 点击后会弹出选择提示框,用来选择代码所在目录,默认是打开的登录用户目录,下方会列出目录下的文件和子目录,可通过鼠标点击来选择对应目录,也可以直接填入路径来定位到代码所在的目录:

 选择好代码目录后,点击”确定“即可。

4、安装C/C++插件

        接下来需要在VSCode中安装C\C++的插件,在插件搜索框中输入”C++“,安装红色框中的插件:

        安装完成后,可以打开源码文件,写代码的时候会有自动补全的提示。

        源码写好后,需要写好Makefile,不写Makefile写一个编译的shell脚本也可以,后续配置编译任务时可以用编译脚本,也可以在编译任务里面添加编译的命令,但为了方便脱离VSCode编译代码,最好写一个Makefile或者编译的shell脚本。

5、编辑任务配置。

        1)快捷键(Ctrl+Shift+p),输入task,选择 配置任务:

        注意,这里在选择配置任务的时候,最好先在VSCode里面打开代码文件,否则不会提示C\C++的生成活动文件,如下图:

         2)选择gcc或者gcc7都可以,后面会修改里面的内容,选择哪个都无所谓,但如果要在VSCode的任务配置里面配置编译命令,这里最好就选择与Linux系统匹配的gcc版本。选额好之后就会在.vscode目录下生成一个task.json文件,即任务配置文件。如下图:

         3)文件内容需要进行修改,如果是需要通过vscode配置代码编译的gcc命令,则只需要对那个代码来改动即可,这里面有两个变量,fileDirname和fileBasenameNoExtension,如果不确定这两个变量所指向的目录,可直接不修改,后面执行此任务的时候会输出,根据输出再来调整目录即可。正常情况下fileDirname指向的是.vscode目录,如需改到选择的代码目录,可以用变量workspaceFolder。

        我的项目本身是已经写好shell编译脚本的,此处就说明下shell编译脚本的task任务配置修改:

        {

            "type": "shell",

            "label": "test build",

            "command": "./build.sh x86",

            "problemMatcher": []

        }

以上为我自己的项目改动的例子,只需要保留四个参数:

        type表示执行的命令类型,执行shell脚本,因此这里就是指定为shell;

        label是标签,这里看自己心情填写,不过后面调试任务会用到这个名字;

        command就很好理解了,命令行上怎么执行编译,这里就是什么。

        最后这个problemMatcher暂时没有用,可以不填,也可以直接不要。

下面再说说如果是直接写好Makefile的情况下,执行make的任务配置的写法,参数还是这几个:

        type还是填shell,因为命令行上执行make也相当于是shell命令;

        label跟上面一样看自己心情写;

        command,这里因为是要执行make命令,因此这里就写make,其实也跟上面一样,命令行上执行什么这里就写什么;

        problemMatcher也是一样,不用填写。

        修改完后的内容如下:

        {

            "type": "shell",

            "label": "test build",

            "command": "make",

            "problemMatcher": []

        }

         4)任务配置文件保存好后,接下来就要运行配置的任务。.快捷键(Ctrl+Shift+p),输入run task,选择运行任务,则会弹出刚刚在任务配置中配置的标签内容,选择需要执行的任务即可。

 

         执行此任务后,代码就会编译并生成执行文件。

6、编辑调试配置

        点击运行于调试按钮,选择添加配置,如下图:

        选择后会自动生成launch.json文件,并同时会弹出选择列表,选择”C/C++gdb启动“即可,默认配置也需要进行对应修改,对其中参数做部分说明:

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "test", //名称随便取
            "type": "cppdbg", //调试类型
            "request": "launch", //请求配置类型
            "program": "${workspaceFolder}/test/test", //可执行程序完整路径(包含程序名称)
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}/test", //可执行程序完整路径(不包含程序名称)
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ],
            "preLaunchTask": "test", //task 任务名称(与tasks.json中名称一致)
            "miDebuggerPath": "gdb file absolute path" //gdb完整路径
        }
    ]
}

         其中的preLaunchTask参数就是指定加载程序前,需要执行的任务,这里自然就是前面配置的编译任务了,注意名字是编译任务的label参数,若不一致则加载的时候会提示没有对应任务。

        点击左上角运行的三角符号,选择刚刚配置的调试任务,就可以开始调试程序,打断点、单步调试都可以直接在VSCode上操作了。

         另外说明下,本人实在Windows 10 的商店里面直接安装的Ubuntu,这个系统跟虚拟机有些不同,因为它本身没有单独分配IP,因此ssh的IP地址跟本机IP地址是相同的,但由于本机已经使用了ssh协议默认的22端口,因此在Ubuntu系统中最好指定到别的端口去,否则可能会出现ssh无法连接到Ubuntu上的情况。如果需要界面UI调试的朋友,请自行百度,这里不再占用他人功劳了。

 

 

 

 

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐