本文告诉大家如何使用 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.2with:binary-path: 输出二进制文件夹路径

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

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

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

效果如下

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

Found 3 issuesIssue Type(ISSUED_TYPE_ID): #Thread Safety Violation(THREAD_SAFETY_VIOLATION): 2Dotnet Resource Leak(DOTNET_RESOURCE_LEAK): 1Analysis Result
==================================================
#0
/home/runner/work/AsyncWorkerCollection/AsyncWorkerCollection/AsyncWorkerCollection/AsyncTaskQueue_/AsyncTaskQueue.cs:72: error: Dotnet Resource LeakLeaked { 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 ViolationUnprotected 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 ViolationRead/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 issuesIssue Type(ISSUED_TYPE_ID): #Thread Safety Violation(THREAD_SAFETY_VIOLATION): 2Dotnet 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. Java代码缺陷自动分析工具介绍

    Java代码缺陷自动分析工具介绍                                                                                     ...

  2. idea2020shezhi代码检查级别_ICT技术:阿里巴巴代码缺陷检测探索与实践

    目前PRECFIX技术已经在阿里巴巴集团内部落地并获得好评,关于"PRECFIX"技术的论文被国际软件工程大会(ICSE)收录. 张昕东(别象) 阿里巴巴 云研发事业部 算法工程师 ...

  3. 【开发者成长】阿里代码缺陷检测探索与实践

    目前PRECFIX技术已经在阿里巴巴集团内部落地并获得好评:关于"PRECFIX"技术的论文被国际软件工程大会(ICSE)收录. 张昕东(别象) 阿里巴巴 云研发事业部 算法工程师 ...

  4. 分享实录 | 阿里巴巴代码缺陷检测探索与实践

    简介: 3月3日,阿里巴巴算法工程师别象在云效DevOps交流群中分享了<阿里巴巴代码缺陷检测探索与实践>.从阿里巴巴代码平台在探索缺陷检测和补丁推荐问题时遇到的挑战入手,介绍了目前业界和 ...

  5. 阿里巴巴代码缺陷检测探索与实践

    目前PRECFIX技术已经在阿里巴巴集团内部落地并获得好评,关于"PRECFIX"技术的论文被国际软件工程大会(ICSE)收录. 张昕东(别象) 阿里巴巴 云研发事业部 算法工程师 ...

  6. idea2020shezhi代码检查级别_阿里巴巴代码缺陷检测探索与实践

    目前PRECFIX技术已经在阿里巴巴集团内部落地并获得好评,关于"PRECFIX"技术的论文被国际软件工程大会(ICSE)收录.张昕东(别象) 阿里巴巴 云研发事业部 算法工程师阿 ...

  7. 静态自动检查代码缺陷与隐患

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

  8. 遇到代码缺陷不要慌,马上教你快速检测和修复

    摘要:人类思维中总存在缺陷,写出的代码一样会存在缺陷,导致软件系统出现不符合预期的行为.本文讨论了软件缺陷的定义.分类.检测和修复. 人类思维中总存在缺陷,写出的代码一样会存在缺陷,导致软件系统出现不 ...

  9. C/C++代码缺陷静态检查工具cppcheck

    cppcheck介绍和安装 CppCheck是一个C/C++代码缺陷静态检查工具.静态代码检查是检查代码是否安全和健壮,是否有隐藏问题. CppCheck只检查编译器检查不出来的bug,不检查语法错误 ...

最新文章

  1. 官宣!《新程序员·开发者黄金十年》正式发布
  2. java观察者模式类图_设计模式(十八)——观察者模式(JDK Observable源码分析)...
  3. C++读取INI文件
  4. JavaScript判断浏览器 Browser detect
  5. oracle10g 安装手册 linux,oracle10g在x86linux上的安装步骤
  6. linux nfs限制连接数,linux – 对NFS有一个有效的稳定性参数吗?
  7. try与raise用法
  8. 在线选课网站用什么服务器,高校网上选课系统 PC服务器替代小型机
  9. phpstudy本地快速搭建网站,并外网访问【无公网IP】
  10. 电压源和电流的关联参考方向_什么是电流,电压的关联参考方向?
  11. 第七章:实现、测试。黑盒测试、白盒测试、单元测试、集成测试
  12. python表示倍数的英语句型_5种倍数表达法句型
  13. linux memery dump
  14. 如何处理CU2X0-2 (DP)变频器的F01910故障
  15. 基于Linux平台上的外文文献阅读软件—需求分析
  16. 基于tomcat的javaweb在线教学网站的开发--完成登录、注册以及考试页面
  17. [转载]Office文档在线编辑的实现之二
  18. 【Linux】对于make/Makefile的编写
  19. esp32的python教程步数采集_ESP32CAM micropython的操作指南
  20. C语言文件的读入与写入

热门文章

  1. RedHat 5.4下构建postfix全功能电子邮(七)-extmail extman平台-(下集)
  2. SWF反编译神器ASV2013功能展示(下)
  3. 【转】SMIL基础教程(1)
  4. 史上最全的Angular.js 的学习资源
  5. bzoj1045 糖果传递
  6. uwp应用在debug模式下运行正常,编译为release版本的时候抛出异常
  7. mysql常见监控项
  8. 专题2-通过按键玩中断\第1课-中断处理流程深度剖析-lesson1
  9. 2010 本年度认证目标:坐沙发的熊
  10. 可转债数据一览表集思录_可转债股票数据一览表