ubuntu下vscode调试开发踩过的坑

30次阅读

共计 3410 个字符,预计需要花费 9 分钟才能阅读完成。

最近刚过安装了中文版的 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, 否则无法进入调试;fu3、args 为一个数组,而不是一个字符串 4、tasks.json 的 label 为编译目标程序名称,必须与 launch.json 的 ”program”: ” ${workspaceFolder}/$(programname)”, 中的 $(programname)相同, 否则调试将出问题。5、”command”: “g++” 为使用 g ++ 编译,对于 c ++ 源码,”gcc” 为使用 gcc 编译,对应 c 源码,”make” 对应 makefile 文件编译,源码工程目录下必须有对应 makefile 工程

正文完
 0