vscode常用插件及使用方法
一. 前言
1.1 写在前面
每个人都有自己的开发方式,用久了、习惯了、满足现有的开发任务也就够了。
很多情况下适应新的工具多少会有一些学习成本。
本文只是推荐一些小工具,感兴趣可以尝试一下,用与不用,自己喜欢就好:smile:。
vscode海量插件,我也只用到冰山一角,如果有好用的插件,欢迎分享。
1.2 主要内容
本文介绍我在日常开发过程中,有助于提高开发效率的插件,并简单描述一下他们的使用方法。
主要针对的开发语言是c
,很多插件也只是会用一些比较基本的功能,如果大家感兴趣,可以再研究研究,或许会有新发现,并欢迎分享。
1.3 使用环境
我是在linux环境下使用的vscode,并且可以访网络,比较方便配置编译和运行环境,也方便下载插件。
1.4 插件安装
vscode左侧栏目中可以找到插件图标,可以看到或配置自己安装的所有插件。
联网环境下可以在vscode插件管理中直接搜索并安装插件。
如果没有联网,可以进入https://marketplace.visualstudio.com/VSCode
下载插件,并导入vscode。网上文档很多,这里不做介绍。
二.插件推荐
2.1 c代码分析
与sourceinsight
不同,没有任何插件的vscode可以理解为一个notepad
,并不具备分析代码、结构体、函数调用等功能。
1. C/C++
常用的同步代码插件为C/C++
:
这个没啥说的,安装后会定期自动同步代码。
2. clangd
Clangd是一个语言服务器,真正分析代码的是通过clang项目来完成的。
该项目旨在提供一个更高效的、占用内存更低的代码分析工具。
clangd插件的代码同步是基于编译时的文件进行的。它会分析编译过程中涉及到的.c
和.h
,与之相反C/C++会分析项目中的所有文件。
由于该插件只分析编译过程中的代码文件,它不仅可以减少分析数据的数量,还能最准确地定位到函数定义的位置。例如在编译内核项目时,如果我们指定编译目标为arm64
,在跳转涉及到架构的代码时,会准确地跳转到arm64的定义中,不会被同项目中的x86架构影响。
在linux代码规模下,clangd已经很明显比C/C++分析的要快,跳转的要准了。
安装clang和clangd的方法可以参考官网https://clangd.llvm.org/
但是clangd也有一个”致命”的缺点,它的同步代码功能需要依赖compile_commands.json
文件,这个文件貌似需要编译一遍项目才能生成。(但是linux项目中有一个gen_compile_commands.py脚本,似乎可以不用编译,就直接生成)。
1 | zrf@debian:linux$ ls -alh compile_commands.json |
它的主要内容如下,就是把make过程中的源文件、目标文件、头文件记录下载,然后供clang来生成同步数据库:
1 | [ |
clang的代码分析都是通过这个compile_commands.json
文件,来生成index数据库,clang通过这个数据库来实现高效的关联与跳转动作。
1 | zrf@debian:linux$ ls .cache/clangd/ |
如果大家尝试过用vscode的C/C++来同步RCIOS4的代码时,就会发现,由于源文件太多了,C/C++基本无法完成同步工作。
但是clangd给我们提供了一种在超级庞大的项目中,只同步编译过程中文件的可能。
2.2 AI类
我没比较过这类插件,功能应该都大查不差。基本之和插件背后关联的语言模型相关。
我使用的是GitHub Copilot
和GitHub Copilot Chat
。它默认用的是GTP-4o。
2.3 文档类
1. markdown
交付项目时用word或者PDF还是传统的方式,但是像概要设计文档这类基本只在开发人员之间传递的文档,我比较喜欢使用markdown。
markdown文档是纯文本文档,它的设计目标就是专注于内容,较少地关注格式。
markdown有自己的写作语言规范。这个文档描述地很详细。90%的语法,最多5分钟,都可以完全学会。
本篇文档就是使用markdown语言来编写。
vscode有一些快速渲染markdown的工具和markdown语法检测工具,推荐给大家:
- Markdown Preview Enhanced
- markdownlint
由于makrdown是专注内容的文本格式,在格式方面,就比较灵活,现在已经有了很多插件,可以支持把Markdown文档转为PDF、word、静态html、eBook等。
2. excalidraw
这是一个画图插件。也可以脱离vscode运行,它有自己的网站,也可以直接画图。
手绘风格,我挺喜欢,这是一些例子:
2.4 环境搭建
Docker相关:
Container Tools
主要用来访问镜像内部的文件系统
ssh相关:
Remote-SSH
假如你的宿主机器可能会运行很多虚拟机,让项目在虚拟机中运行,可以通过这个插件直接访问虚拟机的shell,同时可以编译、运行、调试在虚拟机中的项目。
三. 拓展
本节记录一些插件的详细使用方法
3.1 C/C++
这个插件在比较常见的项目规模下(github上那些开源项目),都足够满足使用需求,linux项目算是比较大的,用C/C++来分同步代码也够用。
这个插件有一个运行和调试功能,有时候可能会帮助我们阅读代码和进行调试。
详细的调试方法参考此处
效果如下,在源文件中打断点,使用launch配置文件,通过launch
模式,使用gdb拉起被调试进程:
在左上侧可以看到当前栈空间内的所有变量信息,可以查看他们当前的值。
左侧有调用栈信息,可以观察调用路径。
也可以像gdb一样单步调试,只不过vscode可以一边看代码,一边进行调试。
1 | zrf@debian:ipsec$ cat .vscode/launch.json |
也可以使用attach
模式附加到一个已经运行着的进程。我用的不多,没有示例展示。
3.2 clangd
之前提到过,它在同步代码时,只会同步那些会被编译的代码。这是通过compile_commands.json
文件完成的。
现在介绍一下这个文件主要通过这三种方式:
- bear
- cmake
- python
bear是make的包装器,通常的使用方法就是bear -- make
,然后就生成compile_commands.json
了。
也就说如果是通过Makefile构建的工程,就一定可以自动生成compile_commands.json
。
如果项目是通过cmake构建的,可以在编译时指定变量cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=1
,cmake执行完成后,就自动生成compile_commands.json
了。
在linux
等一些项目中,有编写好的生成compile_commands.json
的python脚本,直接执行这个脚本应该也行(但我是使用bear – make生成的)
1 | zrf@debian:linux$ ls scripts/clang-tools/gen_compile_commands.py |
3.3 remote ssh
大多数同事都是在windows下进行办公,可以下载一个windows的vscode,然后创建一个虚拟机,通过remote ssh插件访问虚拟机中的文件。
相当于直接ssh到虚拟机中了,可以使用虚拟机中的gcc和常用的开发lib库,这样也方便代码的编译。相当于使用samba挂载到网络位置,然后使用sourceinsight来看代码,再用CRT等软件ssh到编译机来编译项目了。不同的是,vscode的插件极其丰富,可扩展的功能比sourceinsight多。