赞
踩
不管你是在研究什么事物,还是在思考任何观点。只问你自己,事实是什么,以及这些事实所证实的真理是什么。永远不要让自己被自己所更愿意相信的,或者认为人们相信了,会对社会更加有益的东西所影响。只是单单的去审视,什么才是事实。
——罗素
vscode是一款轻量级,且功能强大的编辑器(打破编辑器的次元壁)。本篇文章介绍如何在linux环境下,使用vscode搭建c/c++本地和远程开发环境,在vscode编辑器中实现编写、编译、调试。
下载1.65版本的deb包。链接:vscode-1.65版本
*注 :vscode在某些高版本,无法在root用户下启动,1.65版本经过一些配置可以在root下启动,所以本文使用1.65版本。
dpkg -i code_1.65.2-1646927742_amd64.deb
*注:
1-vscode的deb包默认会安装到/usr/bin下,可执行文件的名字叫code。
2-在deb包安装后会在/home/${usr}/目录下生成.vscode文件夹,这个文件夹就负责存储vscode的一些配置和插件。
安装完成后,在终端键入code便可以打开vscode。在使用root用户启动vscode也许会碰到下面这个问题,
You are trying to start Visual Studio Code as a super user which isn't recommended.
If this was intended, please add the argument `--no-sandbox` and specify an alternate
user data directory using the `--user-data-dir` argument.
普通用户不存在这个问题,而普通用户无法启动一些权限,比如说打开修改一些系统文件,强制修改会要求输入密码,操作起来极不方便。按照如下方法可以勉强修复:
vim ~/.bashrc
#新增一行
alias code='/usr/bin/code --no-sandbox --user-data-dir=~/.vscode'
#保存、退出
source ~/.bashrc
*注:这个方法对某些高版本的vscode无效,对1.65版本是有效的。
环境的搭建的过程其实就是配置插件的过程,vscode的插件默认安装在:
/home/${user}/.vscode/extensions
了解这个文件夹,我们就可以使用离线安装的方式配置插件(本文使用在线安装)。本节用两个实际的例子讲解本地和远程环境的搭建并编译的整个过程。
下面以一个具体的例子来理解整个过程:
安装C/C++和C/C++ Themes插件。
*注:C/C++用于编译,调试,编写代码;C/C++ Themes是C/C++风格的主题包,当然你可以按照自己的喜欢的风格安装其他主题包。
#include <stdio.h>
int main(){
char s[] = "this is a proggramming test using vscode.";
printf("%s\n", s);
return 0;
}
方法一:
利用tasks.json文件,点击Terminal->Configure Tasks->任选一个你熟悉的编译器选项。这里我选择C/C++:gcc build active file。
*注:这里的“active file”(活动文件)指的就是我在每一次点击debug按钮时就去调用一次tasks.json的配置,并启动一次编译。
自动生成的tasks.json文件需要按照自己的需求更改args参数,这里我修改了编译的文件和生成的文件。如果想要debug就要加上-g选项。tasks.json具体类容如下:
{ "version": "2.0.0", "tasks": [ { "type": "cppbuild", "label": "C/C++: gcc build active file", "command": "/usr/bin/gcc", "args": [ "-fdiagnostics-color=always", "-g", "${workspaceFolder}/hello.c", "-o", "${workspaceFolder}/hello" ], "options": { "cwd": "${workspaceFolder}" }, "problemMatcher": [ "$gcc" ], "group": "build", "detail": "compiler: /usr/bin/gcc" } ] }
方法二:
手动编写Makefile文件进行编译。在实际开发中,工程文件往往比较复杂,使用tasks.json无法满足大型工程的编译要求,所以我们大多数时候都是采用自己在本地编译完成后,在使用vscode进行调试。我的Makefile文件如下(实际工程的Makefile肯定比这复杂,这里只是举个例子):
TARGET:=hello OBJS:=hello.o CC:=gcc CFLAGS:=-Wall -g CPPFLAGS:= LDFLAGS:= LIBS:= $(TARGET):$(OBJS) @$(CC) $(CFLAGS) $^ -o $@ $(OBJS):$(OBJS:.o=.c) @$(CC) $(CFLAGS) -c $^ -o $@ .PHONY:clean cleanall clean: @rm -rf *.o cleanall: @rm -rf *.o $(TARGET)
在终端上键入make进行编译。
点击debug按钮->create a launch.json file,建立一个launch.json文件。
进入launch.json,点击右下加的"Add Configuration",并选择"C/C++: (gdb) Launch"。
按照自己的需求修改program和args项,program你编译生成的可执行文件,args是你程序的输入参数,没有就不填写。
*注:如果你使用的是takes.json的方式编译工程,那么记得在launch.json中添加preLaunchTask项,并且让preLaunchTask的值等于takes.json中label选项的值。
launch.json具体类容如下:
{ "version": "0.2.0", "configurations": [ { "name": "(gdb) Launch", "type": "cppdbg", "request": "launch", "program": "${workspaceFolder}/hello", "args": [], "stopAtEntry": false, "cwd": "${workspaceFolder}", "environment": [], "externalConsole": false, //为ture可以打本地的终端窗口作为调试终端 "MIMode": "gdb", "setupCommands": [ { "description": "Enable pretty-printing for gdb", "text": "-enable-pretty-printing", "ignoreFailures": true }, { "description": "Set Disassembly Flavor to Intel", "text": "-gdb-set disassembly-flavor intel", "ignoreFailures": true } ], "preLaunchTask": "C/C++: gcc build active file" //使用takes.json记得添加这一行 } ] }
打断点->点击debug->run,开始调试,
这时候就和我们熟知的集成IDEvs201x一样一样了,开始你的快乐打工人之旅吧!(我是自愿打工的…)
*注:有关takes.json和launch.json更加详细的介绍请移步官方网站:vscode c/c++环境配置
在实际开发中会存在一种场景需要在a机器上调试b机器的代码,这时候,就需要我们搭建远程调试环境。这里我使用windows的a机器连linux的b机器。
安装Remote - SSH插件。
步骤如下:
1-点击左边的远程链接标志
2-“+”
3-键入b机器的ip地址 root@192.168.137.219,
***注:配置文件默认地址为c:/Users/he/.ssh/config,以后想要连接要另一台机器上就可以更改这个地址,或者再建立一个连接。
4-点击左下角的连接标志(我这儿已经连接上了,有后面的一串ip,正常情况下是没有的)
5-Connect Current Window to Host(如果想单独开一个窗口可以选择Connect to Host)
6-linux
7-continue
8-键入用户密码。
在远程终端键入如下命令开启gdbserver:
//2333为端口号,可修改
//hello为上文编译出来的可执行文件
//如果含有参数就继续键入参数即可(记得还要更改launch.json的"args"字段)
gdbserver :2333 ./hello
重复3.1.2和3.1.3的内容,在a机器上编写一段测试代码并编译。这里的launch.json和上文的略微有所不同,主要区别在于"Linux"这个选项上。具体内容如下:
{ "version": "0.2.0", "configurations": [ { "name": "gdb remote", "type": "cppdbg", "request": "launch", "program": "${workspaceFolder}/hello", "args": [], "stopAtEntry": false, "cwd": "${workspaceFolder}", "environment": [], "externalConsole": false, "Linux": { "MIMode": "gdb", "miDebuggerPath": "/usr/bin/gdb", "miDebuggerServerAddress": "192.168.137.119:2333", }, "setupCommands": [ { "description": "Enable pretty-printing for gdb", "text": "-enable-pretty-printing", "ignoreFailures": true }, { "description": "Set Disassembly Flavor to Intel", "text": "-gdb-set disassembly-flavor intel", "ignoreFailures": true } ], //"preLaunchTask": "C/C++: gcc build active file" } ] }
同3.1.4节调试代码方式一样:打断点、点击debug、进入调试。
这里我想说:MobaXterm,这玩意儿自己集成了 x-server,简直是yyds,啥意思呢?就是它可以远程起窗口。远程起窗口又意味着啥意思呢?意味着啥都不用配,只要能用a机器的MobaXterm连上b机器,什么都不用管了。就像下图一样,直接键入code打开工作台,其余操作和本地调式一摸一样。
键入如下指令卸载vscode:
//卸载
dpkg -r code
//记得清空安装的插件和其他配置信息
rm -rf ~/.vscode
*结语:感谢网络上的技术博主和阿广(我同事)的技术赞助,偷学了不少,哈哈。最后有啥错误的地方,欢迎指正,共同进步!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。