WWDC: Thread Sanitizer and Static Analysis
Thread Sanitizer 过程
编译过程中链接了一个新的库。

也可以通过命令行来操作:
$ clang -fsanitize=thread source.c -o executable
$ swiftc -sanitize=thread source.swift -o executable
$ xcodebuild -enableThreadSanitizer YES
不支持设备,只支持模拟器!!! 如果在设备上运行,无法选中。

原理
类似 vector clock 的技术。
对每 8 个字节,分配一个叫做 Shadow state 的东西,记录最多 4 个线程对这块内存的访问记录。
同时,每个线程存储一个结构,包括
- 线程自己的时间戳
- 其他线程的时间戳,用来构建同步点
- 每次内存访问,会增加时间戳的值

一个例子
- 线程 1 写
先获取一个锁,然后把自己的时间戳从 2 变为 3。
然后把内容写入内存中,把相关信息写入 Shadow 中。

线程 1 在释放锁之前,会根据自己时间戳更新锁,这样子锁就有了线程 1 的时间戳信息。 - 线程 2 写
首先,获取锁。把自己线程的时间戳从 22 增加为 23,然后根据锁中线程 1 的时间戳信息,更新自己线程中线程 1 的时间戳为 3。然后访问内存,并把自己线程的时间戳信息写入 shadow。
 线程 2 校验
此时比较 shadow 中线程 1 的时间戳信息和线程 2 中线程 1 的时间戳信息,发现没有问题,校验成功。
然后更新锁中关于线程 2 的信息,释放锁。
线程 3 访问
线程 3 访问时没有获取锁,而是直接写入内存。由于没有获取锁,所以线程 3 中关于其他线程的时间戳信息没有更新。在比较 shadow 中其他线程的时间戳信息时,发现 shadow 中的时间戳比线程 3 中的时间戳大,因此认为发生了 data race。

Static Analyzer
开启方法

Find Missing Localizability

Nullability Violations

参考
-Thread Sanitizer and Static Analysis
- Valgrind Home
- Vector Clock理解
WWDC: Thread Sanitizer and Static Analysis的更多相关文章
- iOS 10 的一个重要更新-线程竞态检测工具 Thread Sanitizer
本文介绍了 Xcode 8 的新出的多线程调试工具 Thread Sanitizer,可以在 app 运行时发现线程竞态. 想想一下,你的 app 已经近乎大功告成:它经过精良的打磨,单元测试全覆盖. ...
- [Testing] Static Analysis Testing JavaScript Applications
The static code analysis and linting tool ESLint is the de-facto standard for linting JavaScript pro ...
- Xcode 8 的 Debug 新特性 —- WWDC 2016 Session 410 & 412 学习笔记
Contents OverView Static Analyzer Localizability Instance Cleanup Nullablility Runtime Issue View De ...
- WWDC 2016 盛宴
转自:http://www.jianshu.com/p/72dd8306c817 整理和维护人:pmstGitHub 链接:WWDC-2016-Feast目前只是整理官方给出的 WWDC 2016 视 ...
- Xcode 8 的 Debug 新特性
Contents OverView Static Analyzer Localizability Instance Cleanup Nullablility Runtime Issue View De ...
- The Ultimate List of Open Source Static Code Analysis Security Tools
https://www.checkmarx.com/2014/11/13/the-ultimate-list-of-open-source-static-code-analysis-security- ...
- Top 40 Static Code Analysis Tools
https://www.softwaretestinghelp.com/tools/top-40-static-code-analysis-tools/ In this article, I have ...
- Pure C static coding analysis tools
Cppcheck - A tool for static C/C++ code analysiscppcheck.sourceforge.netCppcheck is a static analysi ...
- Automated Memory Analysis
catalogue . 静态分析.动态分析.内存镜像分析对比 . Memory Analysis Approach . volatility: An advanced memory forensics ...
随机推荐
- 项目 solrcloud / zookeeper 搭建
财经道网站搜索引擎,数据快速检索,数据集群 功能描述:使用solr为项目数据库表p2p,银行理财,基金,贷款,信托,保险等建立数据索引,实现数据的导入,增量索引.实现检索建议和数据的快速查找.使用zo ...
- py-函数进阶
名称空间 又名name space, 顾名思义就是存放名字的地方,存什么名字呢?举例说明,若变量x=1,1存放于内存中,那名字x存放在哪里呢?名称空间正是存放名字x与1绑定关系的地方 名称空间共3种, ...
- The class cn.itcast.web.common.util.UtilFuns specified in TLD for the function selffn:htmlNewline cannot be found: cn.itcast.web.common.util.UtilFuns
我的一个Util方法的包名更改了,运行时候报这个错误.找到tld文件,把包名重新改为我改的名字就好使了.
- 山东省第七届ACM竞赛 C题 Proxy (Dijkstra算法,单源路径最短问题)
题意:给定0-n+1个点,和m条边,让你找到一条从0到n+1的最短路,输出与0相连的结点... 析:很明显么,是Dijkstra算法,不过特殊的是要输出与0相连的边,所以我们倒着搜,也是从n+1找到0 ...
- android Qzone的App热补丁热修复技术
转自:https://mp.weixin.qq.com/s?__biz=MzI1MTA1MzM2Nw==&mid=400118620&idx=1&sn=b4fdd5055731 ...
- C++中的浮点数运算的误差测试分析
C++中的浮点数运算的误差 项目中需要计算判定,采用的是float型,如: float a < yLing, 其中:a = 2.0, y则从1.0 + 0.2*n 当n = 4时,条件成立了? ...
- centos7 源码安装python3
1.非常重要!必须得先安装py3所依赖的软件包,否则可能会出现py3安装成功,却缺少相应的pip yum groupinstall "Development tools" yum ...
- Ansible之ansible-playbook roles
刚开始学习运用 playbook 时,可能会把 playbook 写成一个很大的文件,到后来可能你会希望这些文件是可以方便去重用的,所以需要重新去组织这些文件. 基本上,使用 include 语句引用 ...
- The Activities of September
- Android Studio 集成 TFS,实现安卓移动开发的持续集成和交付(DevOps)
目录 1 集成TFS系统.... 1.1 概述.... 1.2 安装TFS插件.... 1.2.1 在线安装方式.... 1.2.2 离线安装方案.... 1.3 常见操作.... 1.3.1 新建G ...