本文告诉大家如何使用 Infer# 开源库配合 GitHub 的 Action 实现自动分析代码缺陷,如找到可空引用或线程安全等问题

这是一个在 GitHub 上完全开源的仓库,请看 https://github.com/microsoft/infersharp

刚好今天收到了 Infer# 发布 1.2 版本博客,请看 Infer# v1.2: Interprocedural Memory Safety Analysis For C# - .NET Blog

关于 GitHub 的 Action 的基础入门请看 dotnet 部署 github 的 Action 进行持续集成

使用的方法非常简单,只需要在 GitHub 的 Action 的配置文件里面添加如下代码

    - name: Run Infer#
uses: microsoft/infersharpaction@v1.2
with:
binary-path: 输出二进制文件夹路径

如我在 https://github.com/dotnet-campus/AsyncWorkerCollection 开源仓库上的配置代码如下

    - name: Run Infer#
uses: microsoft/infersharpaction@v1.2
with:
binary-path: AsyncWorkerCollection/bin/Release/netcoreapp3.1

此输出的二进制文件夹路径里面要求是包含 dll 和 pdb 文件,通过 dll 进行分析,通过 pdb 从而告诉你是哪个文件

效果如下

可以看到输出了资源没有释放和线程安全问题

Found 3 issues
Issue Type(ISSUED_TYPE_ID): #
Thread Safety Violation(THREAD_SAFETY_VIOLATION): 2
Dotnet Resource Leak(DOTNET_RESOURCE_LEAK): 1 Analysis Result
==================================================
#0
/home/runner/work/AsyncWorkerCollection/AsyncWorkerCollection/AsyncWorkerCollection/AsyncTaskQueue_/AsyncTaskQueue.cs:72: error: Dotnet Resource Leak
Leaked { n$1 -> 1 } resource(s) in method "AwaitableTask AsyncTaskQueue.GetExecutableTask(Action)" at type(s) System.Threading.Tasks.Task. #1
/home/runner/work/AsyncWorkerCollection/AsyncWorkerCollection/AsyncWorkerCollection/DoubleBuffer_/DoubleBufferLazyInitializeTask.cs:47: warning: Thread Safety Violation
Unprotected write. Non-private method `DoubleBufferLazyInitializeTask`1<T>.OnInitialized()` writes to field `this.dotnetCampus.Threading.DoubleBufferLazyInitializeTask`1<T>._isInitialized` outside of synchronization.
Reporting because this access may occur on a background thread. #2
/home/runner/work/AsyncWorkerCollection/AsyncWorkerCollection/AsyncWorkerCollection/DoubleBuffer_/DoubleBufferLazyInitializeTask.cs:41: warning: Thread Safety Violation
Read/Write race. Non-private method `DoubleBufferLazyInitializeTask`1<T>.OnInitialized()` reads without synchronization from `this.dotnetCampus.Threading.DoubleBufferLazyInitializeTask`1<T>._isInitialized`. Potentially races with write in method `DoubleBufferLazyInitializeTask`1<T>.OnInitialized()`.
Reporting because this access may occur on a background thread. Found 3 issues
Issue Type(ISSUED_TYPE_ID): #
Thread Safety Violation(THREAD_SAFETY_VIOLATION): 2
Dotnet Resource Leak(DOTNET_RESOURCE_LEAK): 1

此工具只能在 Linux 下运行,官方有制作好一个 docker 文件,可以从 https://github.com/microsoft/infersharpaction 拉到。但是问题不大,因为此工具是对输出文件进行分析的,所以可以在 Windows 平台上进行构建,只是将输出的二进制文件使用此工具

在现有的仓库加添加此工具的例子请看 https://github.com/dotnet-campus/AsyncWorkerCollection/pull/66

dotnet 使用 Infer# 自动分析代码缺陷的更多相关文章

  1. Unity3D研究院之静态自动检查代码缺陷与隐患

    原地址:原地址:http://www.xuanyusong.com/archives/2828 代码缺陷和代码错误的最大区别是,代码缺陷不影响游戏编译,而代码错误编译都不通过.但是代码缺陷会影响游戏发 ...

  2. 【转载】Unity3D研究院之静态自动检查代码缺陷与隐患

    代码缺陷和代码错误的最大区别是,代码缺陷不影响游戏编译,而代码错误编译都不通过.但是代码缺陷会影响游戏发布后产生的一系列BUG..我今天无意间逛外国论坛发现的一个方法,使用了一下感觉挺给力的第一时间分 ...

  3. iOS开发之使用 infer静态代码扫描工具

    infer是Facebook 的 Infer 是一个静态分析工具.可以分析 Objective-C, Java 或者 C 代码,报告潜在的问题. 任何人都可以使用 infer 检测应用,可以将严重的 ...

  4. 手写DotNet Core 认证授权代码

    在普通的MVC项目中 我们普遍的使用Cookie来作为认证授权方式,使用简单.登录成功后将用户信息写入Cookie:但当我们做WebApi的时候显然Cookie这种方式就有点不适用了. 在dotnet ...

  5. FindBugs 入门——帮你减少代码中的bug数

    FindBugs 入门 FindBugs 作用 开发人员在开发了一部分代码后,可以使用FindBugs进行代码缺陷的检查.提高代码的质量,同时也可以减少测试人员给你报的bug数. 代码缺陷分类 根据缺 ...

  6. 常用 Java 静态代码分析工具的分析与比较

    常用 Java 静态代码分析工具的分析与比较 简介: 本文首先介绍了静态代码分析的基 本概念及主要技术,随后分别介绍了现有 4 种主流 Java 静态代码分析工具 (Checkstyle,FindBu ...

  7. [原创]Java静态代码检查工具介绍

    [原创]Java静态代码检查工具介绍 一  什么是静态代码检查? 静态代码分析是指无需运行被测代码,仅通过分析或检查源程序的语法.结构.过程.接口等来检查程序的正确性,找出代码隐藏的错误和缺陷,如参数 ...

  8. 四种java代码静态检查工具

    [转载]常用 Java 静态代码分析工具的分析与比较 转载自 开源中国社区 http://www.oschina.net/question/129540_23043       1月16日厦门 OSC ...

  9. .net-C#代码判断

    ylbtech-doc:.net-C#代码判断 C#代码判断 1.A,C#代码判断返回顶部 01.{ C#题目}public static void Main(string[] args){     ...

  10. 静态代码检查工具 cppcheck 的使用

      CppCheck是一个C/C++代码缺陷静态检查工具.不同于C/C++编译器及其它分析工具,CppCheck只检查编译器检查不出来的bug,不检查语法错误.所谓静态代码检查就是使用一个工具检查我们 ...

随机推荐

  1. 09.Java数据算法

    好消息 博客笔记大汇总[15年10月到至今],包括Java基础及深入知识点,Android技术博客,Python学习笔记等等,还包括平时开发中遇到的bug汇总,当然也在工作之余收集了大量的面试题,长期 ...

  2. Linux快速入门(三)Linux文件管理

    Linux文件操作 head head命令用于显示文件的前几行内容,可以通过-num参数展示文件前num行的内容. root@ubuntu:~# ls bb.txt cc.txt snap root@ ...

  3. 如何理解UDP 和 TCP? 区别? 应用场景?

    一.UDP UDP(User Datagram Protocol),用户数据包协议,是一个简单的面向数据报的通信协议,即对应用层交下来的报文,不合并,不拆分,只是在其上面加上首部后就交给了下面的网络层 ...

  4. PS-AXI-PL流水灯设计(2)

    PS-AXI-PL流水灯设计(2) 1.实验原理 承接上一次的实验,这里对AXI的总线结构做出分析,将AXI的理论具体对应到设计上去.为后面自己设计AXI的发送和接受器做好准备. 2.实验操作 (1) ...

  5. Python数据库编程全指南SQLite和MySQL实践

    本文分享自华为云社区<Python数据库编程全指南SQLite和MySQL实践>,作者: 柠檬味拥抱. 1. 安装必要的库 首先,我们需要安装Python的数据库驱动程序,以便与SQLit ...

  6. 【毕业设计】基于springboot的大学生综合素质测评管理系统

    前言 [毕业设计]大学生综测管理系统 个人主页:@MIKE笔记 文章专栏:毕业设计源码合集 联系博主: wx:mikenote 毕设目录 项目名 文章地址 下载 1.基于springboot的大学生综 ...

  7. docker笔记之安装

    本文于2017年上半年完成,发布在个人博客网站上. 考虑个人博客因某种原因无法修复,于是在博客园安家,之前发布的文章逐步搬迁过来. 最近由于工作关系,接触到了docker技术.为了对docker有更多 ...

  8. 密码学系列之:IDEA

    密码学系列之:IDEA 目录 简介 IDEA简介 IDEA原理 IDEA子密钥的生成 简介 IDEA的全称是International Data Encryption Algorithm,也叫做国际加 ...

  9. Lustre架构介绍的阅读笔记-HSM

    本文是在阅读Introduction to Lustre* Architecture的Lustre HSM System Architecture时的笔记. Hierarchical Storage ...

  10. 【FAQ】HarmonyOS SDK 闭源开放能力 —Map Kit

    1.问题描述 在App中供用户在地图上选择地址,目前在使用Map Kit结合geolocationManager逆地理编码时获取的地址信息描述不准确,希望能提供相应的Demo参考. 解决方案 Demo ...