vscode的调试环境构建

vscode 的 c++ 调试环境构建

我用 vscode 调试主要有几个:

  1. vscode 本机调试
  2. vscode 通过gdbserver调试开发板
  3. vscode 调试 docker 容器
  4. vscode python 调试
  5. vscode 通过 ssh 远程调试(步骤与本机调试类似,只不过需要先ssh到远程然后安装对应插件调试)

我的 vscode 版本是 1.55.0

写完c++代码可以右击使用 格式化文档或者格式化选中的内容会将你的代码格式对齐。

本机调试环境构建

环境准备

  • gdb
  • vscode 的 CMake 插件
  • vscode 的 C/C++ 插件
  • vscode 的 PythonPython 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

  1. 进入设置界面
  2. 搜索auto update 然后关闭

如果出现了某个插件没有安装成功的情况,参考链接:https://blog.csdn.net/Emil_/article/details/118656107?spm=1001.2014.3001.5501
主要是可以通过这个网址来离线下载插件。
以c/c++ 插件举例 首先找到 c/c++ 插件,然后点进去。

然后选择离线下载(因为是从github上下载 release包 所以一般很慢)

之后选择自己想要的版本下载,下载完成在vscode中通过VSIX安装即可。

如果出现安装了插件 还是不能跳转和格式化 的情况,可以参考 这里

cmake 调试步骤

  1. 打开一个工程,配置该工程的属性,在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
  1. 配置完所有的属性后,点击 Build 按钮,就会开始构建工程

  2. 设置断点,点击 "瓢虫"(调试) 按钮

配置 **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 **

之后的操作就跟方法一一样

遇到的问题

  1. 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 插件

调试步骤

  1. 开发板上运行 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/
  1. vscode 配置 launch.json
    配置 launch.json 与前面的配置过程一致,但是 launch.json 中需要增加两对key和value,分别是
  • 添加 miDebuggerPath : 对应框架的gdb的路径
  • 添加 miDebuggerServerAddress : 开发板ip和端口号,要和gdbserver中的ip和端口一致,修改成功后就可以在代码中加断点调试了

docker 容器调试环境构建

环境准备

  • 在容器中安装 ** C/C++ ** 和 CMake 插件 (后面会讲怎么安装)
  • 在本机的vscode中 安装 Remote - Containers插件

调试步骤

  1. vscode 进入到运行中的容器
    点击图像标记的按钮

    之后选择进入到运行中的容器

    然后根据自己的需求选择进入哪个容器

  2. 在容器中安装插件
    进入到容器后,就可以将插件安装到容器中

  3. 调试方式就参考本机调试步骤,可以通过 cmake配置调试,也可以通过配置json进行调试

posted @ 2021-05-11 10:22  cc96  阅读(2419)  评论(0编辑  收藏  举报