vscode的調試環境構建


vscode 的 c++ 調試環境構建

我用 vscode 調試主要有幾個:

  1. vscode 本機調試
  2. vscode 通過gdbserver調試開發板
  3. vscode 調試 docker 容器
  4. vscode python 調試

我的 vscode 版本是 1.55.0

本機調試環境構建

環境准備

  • gdb
  • vscode 的 CMake 插件
  • vscode 的 C/C++ 插件
  • vscode 的 PythonPython for VSCode 插件(Python 調試很簡單,左下角選擇python環境,之后加斷點 F5就能調試)

注意說明

如果是使用 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進行調試


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM