vscode的调试环境构建
vscode 的 c++ 调试环境构建
我用 vscode 调试主要有几个:
- vscode 本机调试
- vscode 通过gdbserver调试开发板
- vscode 调试 docker 容器
- vscode python 调试
- vscode 通过 ssh 远程调试(步骤与本机调试类似,只不过需要先ssh到远程然后安装对应插件调试)
我的 vscode 版本是 1.55.0
写完c++代码可以右击使用 格式化文档或者格式化选中的内容会将你的代码格式对齐。
本机调试环境构建
环境准备
- gdb
- vscode 的 CMake 插件
- vscode 的 C/C++ 插件
- vscode 的 Python 和 Python for VSCode 插件(Python 调试很简单,左下角选择python环境,之后加断点 F5就能调试)
- vscode 的 Remote-SSH 插件
注意说明
如果是使用 cmake 进行作为编译工具,首先需要增加 -g选项, 然后设置 debug 模式,如果cmakelist中有O3优化,请改成O0。 举例如下:
set(CMAKE_BUILD_TYPE debug)
set(CMAKE_CXX_FLAGS "-O0 -pipe -Wall -g")
add_definitions("-g")
如果通过 makefile 进行编译程序的话,增加 -g的编译选项,举例如下:
CC:= g++
APP:= client
APP_INSTALL_DIR?=/home/cc/bin/
SRCS:= $(wildcard *.cpp)
INCS:= $(wildcard *.h)
OBJS:= $(SRCS:.cpp=.o)
CFLAGS += -I -I /usr/local/include \
-fPIC -std=c++11 -g # -g
LIBS := -L/usr/local/lib/ -lopencv_imgproc -lopencv_core -lopencv_highgui -lopencv_imgcodecs -ldl -lm -lpthread
all: $(APP)
%.o: %.c $(INCS) Makefile
$(CC) -c -o $@ $(CFLAGS) $<
$(APP): $(OBJS) Makefile
$(CC) -o $(APP) $(OBJS) $(LIBS)
install: $(APP)
cp -rv $(APP) $(APP_INSTALL_DIR)
clean:
rm -rf $(OBJS) $(APP)
vscode 插件关闭自动更新
有时候插件会自动更新,界面上显示已安装,实际上却并没有安装成功,会导致某些功能之前能用,后来不能用。所以我将插件的自动更新关闭了。
参考链接:https://blog.csdn.net/mighty13/article/details/114419378
- 进入设置界面
- 搜索auto update 然后关闭
如果出现了某个插件没有安装成功的情况,参考链接:https://blog.csdn.net/Emil_/article/details/118656107?spm=1001.2014.3001.5501
主要是可以通过这个网址来离线下载插件。
以c/c++ 插件举例 首先找到 c/c++ 插件,然后点进去。
然后选择离线下载(因为是从github上下载 release包 所以一般很慢)
之后选择自己想要的版本下载,下载完成在vscode中通过VSIX安装即可。
如果出现安装了插件 还是不能跳转和格式化 的情况,可以参考 这里
cmake 调试步骤
- 打开一个工程,配置该工程的属性,在vscode 底部会有以下按钮(从左至右的功能分别是 选择debug还是release, 选择编译器, 构建, 选择构建的目标默认是所有,调试,运行)
配置属性的时候会有相关打印,以下是我的打印信息
[proc] Executing command: /home/cc/software/cmake-3.16.0-rc1-Linux-x86_64/bin/cmake --no-warn-unused-cli -DCMAKE_EXPORT_COMPILE_COMMANDS:BOOL=TRUE -DCMAKE_BUILD_TYPE:STRING=Release -DCMAKE_C_COMPILER:FILEPATH=/usr/bin/gcc-7 -DCMAKE_CXX_COMPILER:FILEPATH=/usr/bin/g++-7 -H/home/cc/work/c++_project/alpha_pose_demo -B/home/cc/work/c++_project/alpha_pose_demo/build -G "Unix Makefiles"
[cmake] Not searching for unused variables given on the command line.
[cmake] -- OpenCV library status:
[cmake] -- version: 3.2.0
[cmake] -- libraries: opencv_calib3d;opencv_core;opencv_features2d;opencv_flann;opencv_highgui;opencv_imgcodecs;opencv_imgproc;opencv_ml;opencv_objdetect;opencv_photo;opencv_shape;opencv_stitching;opencv_superres;opencv_video;opencv_videoio;opencv_videostab;opencv_viz;opencv_aruco;opencv_bgsegm;opencv_bioinspired;opencv_ccalib;opencv_datasets;opencv_dpm;opencv_face;opencv_freetype;opencv_fuzzy;opencv_hdf;opencv_line_descriptor;opencv_optflow;opencv_phase_unwrapping;opencv_plot;opencv_reg;opencv_rgbd;opencv_saliency;opencv_stereo;opencv_structured_light;opencv_surface_matching;opencv_text;opencv_ximgproc;opencv_xobjdetect;opencv_xphoto
[cmake] -- include path: /usr/include;/usr/include/opencv
[cmake] -- Configuring done
[cmake] -- Generating done
[cmake] -- Build files have been written to: /home/cc/work/c++_project/alpha_pose_demo/build
-
配置完所有的属性后,点击 Build 按钮,就会开始构建工程
-
设置断点,点击 "瓢虫"(调试) 按钮
配置 **launch.json** 进行调试
如果点击调试按钮无法调试的话,可以使用配置json文件来调试(Makefile 编译的程序也可以使用这种方法调试)
- 方法一:
点击 Run ,选择 ADD Configuration. (如果已经存在 launch.json,可以选择 open Configurations)
然后选择环境(我是linux系统,所以选择 C++(GDB/LLDB))
然后选择默认配置
之后会生成一个json
根据自己的需求修改json文件中的参数,参数说明参考https://code.visualstudio.com/docs/cpp/launch-json-reference
"name": "(gdb) 启动", # 名字,可以自由更改
"type": "cppdbg", # 类型,按默认配置
"request": "launch", # 响应方式,按默认配置
"program": "输入程序名称,例如 ${workspaceFolder}/a.out", # 调试的应用程序, 填写调试程序的绝对路径
"args": [], # 应用程序的 参数,根据自己的需求,来填写,举例说明 ["args1","args2"],无参数就不管
"stopAtEntry": false, # 是否在main的开始中断,设置 true 调试就会中断在程序开始
"cwd": "${workspaceFolder}", # 调试时程序的工作目录
"environment": [], # 环境变量,根据自己的需求设置
"externalConsole": false, # 额外的控制终端,设置 true 会新建一个终端
"MIMode": "gdb", # 调试的模式,只能是gdb和lldb
"setupCommands": [ # 设置GDB或LLDB而要执行的命令的JSON数组,我也没有用过这个功能
{
"description": "为 gdb 启用整齐打印",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]
配置完成之后,就可以使用 F5 进行调试,或者选择 ** Run and Debug ** 的区域 点击小三角形按钮进行调试 。
- 方法二:
选择 ** Run and Debug ** 的区域
然后直接点击 按钮** Run and Debug ** 或者 点击 ** create a launch.json file **
之后的操作就跟方法一一样
遇到的问题
- cmake 构建时出现 下面错误
[rollbar] Unhandled exception: Unhandled Promise rejection: build Error: Build failed: Unable to configure the project {}
原因: cmake 的路径错误(因为我的cmake是直接下载的可执行程序)
解决方法: 在设置中指定 cmake的路径
配合 gdbserver 远程调试开发板环境构建
环境准备
- 交叉编译好的gdbserver (推荐直接在这里下载,具体下载哪个就看自己是远程调试的开发板是哪个框架的,比如调试armv7
的开发板就下载gdbserver-7.10.1-arm6v,调试aarch64的开发板就下载gdbserver-8.1.1-aarch64-le) - 开发板上的gdb
- vscode 的 C/C++ 插件
- vscode 的 Remote Development 插件
调试步骤
- 开发板上运行 gdbserver
/mnt # gdbserver Usage: gdbserver [OPTIONS] COMM PROG [ARGS ...] gdbserver [OPTIONS] --attach COMM PID gdbserver [OPTIONS] --multi COMMCOMM may either be a tty device (for serial debugging),HOST:PORT to listen for a TCP connection, or '-' or 'stdio' to use stdin/stdout of gdbserver.PROG is the executable program. ARGS are arguments passed to inferior.PID is the process ID to attach to, when --attach is specified.
举例说明
./gdbserver-7.10.1-arm6v 192.168.53.25:1000 client_multi ../temp0/
- vscode 配置 launch.json
配置 launch.json 与前面的配置过程一致,但是 launch.json 中需要增加两对key和value,分别是
- 添加 miDebuggerPath : 对应框架的gdb的路径
- 添加 miDebuggerServerAddress : 开发板ip和端口号,要和gdbserver中的ip和端口一致,修改成功后就可以在代码中加断点调试了
docker 容器调试环境构建
环境准备
- 在容器中安装 ** C/C++ ** 和 CMake 插件 (后面会讲怎么安装)
- 在本机的vscode中 安装 Remote - Containers插件
调试步骤
-
vscode 进入到运行中的容器
点击图像标记的按钮
之后选择进入到运行中的容器
然后根据自己的需求选择进入哪个容器
-
在容器中安装插件
进入到容器后,就可以将插件安装到容器中
-
调试方式就参考本机调试步骤,可以通过 cmake配置调试,也可以通过配置json进行调试