使用VS Code静态检查Android C/C++代码(clangd插件)

前言

在前文使用VS Code更好的编写Android C/C++代码(C/C++插件)中主要介绍了如何更好的写代码,本文要探讨的是从“好写”到“写好”的问题–如何做静态代码检查。

在查找资料中发现了CppcheckClang-Tidy等工具,Cppcheck的介绍网上资料很多,本文主要探索Clang-Tidy。

clang-tidy的使用

介绍

从官网中获取到简介:

clang-tidy是基于clang的C++静态检查工具。其目的是提供一个可扩展的框架,用于诊断和修复典型的编程错误,例如样式冲突,接口滥用或可以通过静态分析得出的错误。clang-tidy是模块化的,并提供了用于编写新支票的便捷界面。

由于官网的介绍比较难理解,下面参考前人的研究,在深入研究Clang(十三) clang-tidy简介中总结了clang-tidy简介。

  • clang-tidy是基于AST的静态检查工具。因为它基于AST,所以要比基于正则表达式的静态检查工具更为精准,但是带来的缺点就是要比基于正则表达式的静态检查工具慢一点。也是因为它基于AST,所以clang-tidy运行的时候需要知道编译命令。

  • clang-tidy不仅仅可以做静态检查,还可以做一些修复工作。

  • clang-tidy通过添加check来添加检查规则,目前已经有一系列的check:Extra Clang Tools 10 documentation 通过clang-tidy -list-checks会列出默认开启的的check,clang-tidy-tidy -list-checks -checks=* 会列出所有的check。

  • clang-tidy因为需要知道编译命令,所以必须通过compile_commands.json获取编译命令。

深入研究Clang(十四) clang-tidy的使用中总结了clang-tidy的使用。

  • clang-tidy在Clang/LLVM的预编译发布包主目录/bin目录之下。
    例如:以clang+llvm-8.0.0-x86_64-linux-gnu-ubuntu-16.04发布包为例,clang-tidy位于:clang+llvm-8.0.0-x86_64-linux-gnu-ubuntu-16.04/bin/clang-tidy。

  • clang-tidy的运行依赖于compile_commands.json。可以通过“-checks=”来设定检查规则。或者不使用“-checks=”选项,而在项目主目录之下添加.clang-tidy文件,在里面编写项目的检查规则,这种方式更加适合对整个项目进行定制化的规则编写。.clang-tidy文件并不是必须放在主目录之下,只是通常放在主目录之下方便对整个项目进行检查。

  • clang-tidy的检查规则编写的时候,规则名称前面带有“-”的是让该规则失效,规则名称直接写的是要使用该规则。

此时我们知道了如何使用clang-tidy来做静态代码检查,以及大概的原理,但是具体代码检查的风格,我们现在还未指定。

.clang-tidy的设置

突然想到在使用Android Studio编写C/C++时,里面有代码提示和检查的功能。下面我们来看下Android Studio是如何做到的。

Android Studio Settings

从上图中可以看到Android Studio正是使用了clang-tidy

Android Studio中又使用了CLion的默认配置

所以我们也可以使用CLion的默认配置的来作为基础配置。.clang-tidy文件的内容大致如下:

Checks: >
    *,
    -android-*,
    -bugprone-bool-pointer-implicit-conversion,
    -bugprone-exception-escape,
    -cert-dcl16-c,
    -cert-dcl50-cpp
    ...

总结:Android Studio对C/C++的开发非常友好,槽点就是使用Android Studio有时会内存爆炸。此时可以在命令行使用clang-tidy xxx.cpp来检查代码了,下面介绍如果在VS Code中也拥有此功能。

VS Code clangd插件的使用

继续探索发现了vscode clangd插件vscode-clangd

介绍

clangd理解您的C++代码,并向您的编辑器添加了一些智能功能:代码完成,编译错误,定位定义等等。 clangd是一种语言服务器,可以通过插件与许多编辑器一起使用。

clangd基于Clang C ++编译器,并且是LLVM项目的一部分。

安装

首先在VS Code中安装clangd扩展,安装后,扩展会主动安装clangd软件包,若安装失败,可手动安装。

Ubuntu平台安装命令:sudo apt-get install clangd-10,其它平台请参考安装clangd

项目设置

为了理解您的源代码,clangd需要知道您的编译参数。

默认情况下,clangd会假定您的代码构建为clang some_file.cc,并且您可能会因丢失#included文件等而收到虚假错误。可以使用compile_commands.json解决此问题。

该文件为项目中的每个源文件提供编译命令。它通常由工具生成。Clangd将在您搜索的文件的父目录中查找。

注意:我们在使用VS Code更好的编写Android C/C++代码(C/C++插件)中说明了Android项目如何生成compile_commands.json文件。

特点

具体特点可以参考官方文档,我们主要探索其中clang-tidy的功能。

使用clangd为VS Code提供C/C ++语言IDE功能:

  • 代码完成
  • 编译错误和警告
  • 定义和交叉引用
  • 包括管理
  • 代码格式
  • 简单重构

其中还提到:

Errors, warnings, and clang-tidy

输入时会显示代码错误(均为红色的波浪形下划线,并在“问题”面板中)。 这些与clang编译器产生的相同,并且可以自动应用建议的修复程序。

支持大多数clang-tidy检查(可以使用.clang-tidy文件启用这些检查)。

从介绍来看提供的功能和C/C++插件非常类似。但其中还集成了clang-tidy的功能,这正是我们需要的。

总结:1、首先VS Code clangd插件;2、再安装clangd软件包;3、在项目中生成compile_commands.json文件。以上完成后,在VS Code中就拥有你静态代码检测功能。

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值