最近刚过安装了中文版的ubuntu18.04.1,安装完之后想在ubuntu上安装vscode做c/c++的开发调试,踩了不少坑,在此记录一下,希望大家在这条路上不要再踩同样的坑。
1.安装vscode
安装vscode很简单,只需要一个命令即可搞定:
$ sudo apt-get install visual-studio-code
注:如果需要卸载,可使用 $ sudo apt-get remove code
安装成功后,会在菜单栏上出现vscode的标签,如果没有,则可以在terminal中使用命令./code打开vscode
2.vscode使用过程的遇到的坑
安装完vscode后,用vscode打开代码工程目录,并根据提示安装c/c++插件后,发现鼠标无法跟踪函数和成员变量的定义,即control+鼠标单击(或鼠标右键)->Go to Definition时,提示no definition found for *。被这个莫名其妙的问题搞得一头雾水,百思不得其解。之前ubuntu16.04.4一直用的好好的,为什么到了18.04.1就找不到函数定义了。
后来仔细看提示才发现,代码路径里面的文件夹名称桌面是中文名(代码放在桌面目录下),会不会是因为这个问题才导致vscode无法跟踪函数定义呢?于是将ubuntu系统切成英文系统,切换方法如下:
1.打开系统菜单中的设置-》Region & Language
将language/语言 从中文改为English(United States)
将Formats/格式 从中国改为United States
然后重启系统
2.重启之后发现home目录下除了中文的桌面目录之外,还多了一个Desktop目录,于是将中文桌面目录下的所有文件夹剪切到Desktop目录下,并检查工程代码目录下是否还有其他中文字符,有的话继续改成英文。
3.使用vscode打开工程文件夹目录,然后再control+鼠标单击-》Go to Definition跟踪函数定义,函数已经自动跳转到函数的定义页面。问题成功解决。
3.vscode调试linux下的c/c++工程
3.1准备源码
准备源码main.cpp,代码如下:
#include <stdio.h>
int main()
{
printf("vscode test debug\n");
int a = 3;
int b = 2;
int c = a*b;
printf("a+b=%d\n",c);
getchar();
return 0;
}
3.2 vscode调用makefile编译源码
为3.1的测试代码准备一个makefile文件,内容如下:
TARGETNAME = build
all:$(TARGETNAME)
main.o:main.cpp
g++ -g -O0 -Wall -fPIC -c $^
$(TARGETNAME):main.o
g++ -o $@ $^
.PHONY:clean
clean:
rm -f $(TARGETNAME) main.o
$ g++ -g -c test.cpp
$ g++ -o test test.o
在terminal中make会生成build可执行文件
3.3 创建vscode调试配置文件
使用vscode打开test.cpp所在的文件夹目录,按F5,弹出选择调试环境对话框(Select Environment),从对话框的下拉菜单中选择C++(GDB/LLDB),如下图所示:
选择后C++(GDB/LLDB)程序自动生成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": "(gdb) Launch",
"type": "cppdbg",
"request": "launch",
"program": "enter program name, for example ${workspaceFolder}/a.out",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": true,
"MIMode": "gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]
}
]
}
1)、将
"program": "enter program name, for example ${workspaceFolder}/a.out",
改为:
"program": "${workspaceFolder}/test",
2)、将
"externalConsole": true,
改为:
"externalConsole": false,
3)、如果存在程序启动参数,则将
"args": [],
改为:
"args": ["arg1","arg2", "arg3"],
3.4 使用vscode编译makefile工程
进入.vscode目录(隐藏文件),创建tasks.json文件。
内容如下所示:
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
{
"label": "build",
"type": "shell",
"command": "make",
//"args":["-g", "${workspaceRoot}/main.cpp","-o","build"],
"problemMatcher": [
"$gcc"
]
}
]
}
保存后按ctrl+shift+B进行编译。编译成功后会在当前目录下生成名为build的可执行文件。然后在代码中设置断点,按F5即可进行调试代码。
3.5 使用vscode编译源码
进入.vscode目录(隐藏文件),创建tasks.json文件。
内容如下所示:
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
{
"label": "build",
"type": "shell",
"command": "g++",
"args":["-g", "${workspaceRoot}/main.cpp","-o","build"],
"problemMatcher": [
"$gcc"
]
}
]
}
保存后按ctrl+shift+B进行编译,编译成功后即可进行调试。
3.6 调试
用vscode打开源码,使用F9在需要调试的地方设置断点,按F5运行程序,便可以开始linux下程序的调试,调试方法与windows的vs开发环境几乎完全一样。
4.总结一下踩坑的经验教训
1、vscode的代码路径不能有中文,否则会出现无法跟踪代码定义的问题;
2、"externalConsole": 应该为false,否则无法进入调试;fu
3、args为一个数组,而不是一个字符串
4、tasks.json的label为编译目标程序名称,必须与launch.json的"program": " ${workspaceFolder}/$(programname)",中的$(programname)相同,否则调试将出问题。
5、"command": "g++"为使用g++编译,对于c++源码,"gcc"为使用gcc编译,对应c源码,"make"对应makefile文件编译,源码工程目录下必须有对应makefile工程
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。