首页 > 编程语言 >VSCode C++跳转和调试方法总结

VSCode C++跳转和调试方法总结

时间:2022-09-30 20:36:29浏览次数:110  
标签:插件 clangd CMake VSCode C++ json 跳转

跳转

GNU Global标签式跳转

场景:
用GNU Global,基于标签式的跳转。
插件:

  1. "C/C++ GNU Global"插件;
  2. 本地机器上的GNU Global软件。

优缺点:

  1. 基于标签式跳转,相当于纯文本模式,最好只用于纯阅读代码场景。至于这种标签式跳转在纯阅读代码场景下效果到底怎么样,还需要体验完善。
  2. 没有智能感知,不能提供很好的智能补全效果,修改了代码后需要重新建立标签索引。

方法:
VSCode中通过GNU Global实现C++函数跳转和代码自动补全

"C/C++"插件IntelliSense式跳转

场景:
基于"C/C++"插件使用IntelliSense模式跳转。
插件:

  1. "C/C++"插件。

优缺点:

  1. 不依赖makefile,CMakeLists,compile_command.json文件,不挑剔代码,基于智能感知,能提供差不多的跳转体验与智能补全体验,代码环境复杂时一般用这种模式。
  2. 对于重载等跳转支持不是很友好,它很多情况下不知道调用的哪个重载,有些符号也跳转不了,要结合搜索功能一起使用。

方法:
安装"C/C++"插件后,简单配置后就能跳转了。

"C/C++"插件标签式跳转

暂时未研究,待补充完善。

"clangd"插件跳转

场景:
基于"clangd"插件跳转。
插件:

  1. "clangd"插件。
  2. 本地机器上的clangd软件。

优缺点:

  1. 依赖compile_command.json文件,自己写小工程代码体验良好。但阅读有些大型项目,就算有compile_command.json有时候也是无法识别符号,还可能导致clangd服务崩溃。

方法:
VSCode + WSL + clangd搭建C++开发环境

运行与调试

"C/C++"插件运行与调试

场景:
编写单文件或者很少文件的代码。
插件:

  1. "C/C++"插件。

优缺点:

  1. 仅限于编写单文件或者很少文件的代码。

方法:

  1. 安装gcc等编译工具。
  2. 点击VSCode菜单栏"运行" > "启动调试/以非调试模式运行"后"C/C++"插件会生成task.json与lanch.json即可运行与调试。

"C/C++"+"CMake"+"CMake Tools"插件调试

场景:
编写大型项目,使用cmake构建时使用。
插件:

  1. "C/C++"插件;
  2. "CMake"插件;
  3. "CMake Tools"插件。

优缺点:

  1. "C/C++"的智能感知没有"clangd"好,但"clangd"依赖compile_commands.json,有很大型项目没有条件生成compile_commands.json

方法:

  1. 禁用"clangd"插件。
  2. 安装gcc等编译工具。
  3. 用"CMake: Build"指令编译。
  4. 打断点,然后用"CMake: Debug"指令启动调试,用"CMake: Run Without Debugging"指令以非调试模式运行。若程序需要启动参数,则在用户级setting.json中添加如下内容:
"cmake.debugConfig": {
  "args": ["arg1", "arg2"],
}
  1. 也可以在VSCode菜单栏依次点击"运行" > "启动调试/以非调试模式运行",根据提示自动生成task.json,然后就能运行与调试了。如需要运行参数,则在task.json对应位置添加运行参数即可。

"clangd"+"CMake"+"CMake Tools"插件调试

场景:
编写大型项目,使用cmake构建时使用。
插件:

  1. "clangd"插件;
  2. "CodeLLDB"插件;
  3. "CMake"插件;
  4. "CMake Tools"插件。

优缺点:

  1. "clangd"插件的智能感知比较不错,编写代码时体验比较好。但"clangd"依赖compile_commands.json,有很大型项目没有条件生成compile_commands.json

方法:

  1. 禁用"C/C++"插件。
  2. 安装gcc等编译工具。
  3. 用"CMake: Build"指令编译。
  4. 打断点,在VSCode菜单栏依次点击"运行" > "启动调试/以非调试模式运行"启动运行与调试。首次会提示错误,点击确定后会自动帮你创建launch.json文件(前提是正确安装了"CodeLLDB"插件),等launch.json文件创建完毕后,再次启动就能运行与调试代码了。

若没有自动创建launch.json文件,则自己手动创建,并放于工程的.vscode目录下。
launch.json文件内容:

{
    // 使用 IntelliSense 了解相关属性。
    // 悬停以查看现有属性的描述。
    // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "type": "lldb",
            "request": "launch",
            "name": "Debug",
            "program": "${workspaceFolder}/<executable file>",
            "args": [],
            "cwd": "${workspaceFolder}"
        }
    ]
}

参数说明:

  • program:指定"CMake: Build"生成的二进制的路径,一般在Build目录下;
  • args:程序启动参数。

标签:插件,clangd,CMake,VSCode,C++,json,跳转
From: https://www.cnblogs.com/sinicheveen/p/16746026.html

相关文章

  • 解决Anaconda关联VSCode使用conda运行Python报错(无法将“conda”项识别为 cmdlet、函
    错误刚安装好Anaconda之后创建好VSCode环境运行Python会报错,但是仍然是可以正常运行,强迫症想解决报错PSC:\Users\Satan\Documents\Code\Python>condaactivatePyth......
  • C++心得
    I/Ocout保留有效数字问题C++中cout默认保留六位有效数字,并且进行四舍五入修改保留数的方法cout.precision(2); //用这个来改变默认保留几位小数cout<<"保留两位有效:......
  • C++动态内存管理
    #include<iostream> usingnamespacestd;/*intmain(){  int*p;  p=newint;  if(p==NULL)  {    cout<<"AllocationFailure!\n"; ......
  • C++右值和移动
    值分左右C++表达式的值类别:这些名词的字面含义:一个lvalue是通常可以放在等号左边的表达式,左值一个rvalue是通常只能放在等号右边的表达式,右值一个glvalue是generali......
  • vscode 设置引用分层
    前言对于一个团队来讲,维持一样的代码风格非常重要.而现代的开发工具,都提供了很好的支持,这里简单记录一下VsCode的一些设置VsCode安装Go插件在VsCode中安......
  • vscode 指定 anaconda创建的python虚拟环境
    1点击左下角的设置。2点击commandpalette。3搜索框输入Python:SelectInterpreter。4选择虚拟环境。......
  • 摆脱鼠标操作 - vscode - vim Ctrl + hjkl 我定位为 上下翻半页和行头行尾
    为什么摆脱鼠标操作-vscode-vimCtrl+hjkl我定位为上下翻半页和行头行尾翻页和当前行的开头结尾我觉得都是高频操作实现settings.json还附加了几个其他......
  • 【排序】快速排序C++实现总结
    一、算法步骤快速排序的基本思想是:1.先从数列中取出一个数作为基准数。2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。3.再对左右区间重复第二步,......
  • C++——不存在从 "std::pair<int, int>" 到 "int" 的适当转换函数
    1#include<iostream>2#include<vector>3#include<map>4#include<string>5#include<utility>678intUpdate(std::pair<int,int>a){9......
  • VSCode 插件
    我的全部插件必安装项ChineseSimplified(中文)ColorInfo(识别颜色)CodeRunner(运行各种代码)PrettierFormatter(格式化代码)OneDarkPro(更改主题颜色)OpenFolderCont......