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. 线程 1 写
    先获取一个锁,然后把自己的时间戳从 2 变为 3。
    然后把内容写入内存中,把相关信息写入 Shadow 中。

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

  4. 线程 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的更多相关文章

  1. iOS 10 的一个重要更新-线程竞态检测工具 Thread Sanitizer

    本文介绍了 Xcode 8 的新出的多线程调试工具 Thread Sanitizer,可以在 app 运行时发现线程竞态. 想想一下,你的 app 已经近乎大功告成:它经过精良的打磨,单元测试全覆盖. ...

  2. [Testing] Static Analysis Testing JavaScript Applications

    The static code analysis and linting tool ESLint is the de-facto standard for linting JavaScript pro ...

  3. Xcode 8 的 Debug 新特性 —- WWDC 2016 Session 410 & 412 学习笔记

    Contents OverView Static Analyzer Localizability Instance Cleanup Nullablility Runtime Issue View De ...

  4. WWDC 2016 盛宴

    转自:http://www.jianshu.com/p/72dd8306c817 整理和维护人:pmstGitHub 链接:WWDC-2016-Feast目前只是整理官方给出的 WWDC 2016 视 ...

  5. Xcode 8 的 Debug 新特性

    Contents OverView Static Analyzer Localizability Instance Cleanup Nullablility Runtime Issue View De ...

  6. 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- ...

  7. Top 40 Static Code Analysis Tools

    https://www.softwaretestinghelp.com/tools/top-40-static-code-analysis-tools/ In this article, I have ...

  8. Pure C static coding analysis tools

    Cppcheck - A tool for static C/C++ code analysiscppcheck.sourceforge.netCppcheck is a static analysi ...

  9. Automated Memory Analysis

    catalogue . 静态分析.动态分析.内存镜像分析对比 . Memory Analysis Approach . volatility: An advanced memory forensics ...

随机推荐

  1. 调用数据库--stone

    from Mysql_operate_class import mysql def saveMysqlData(sql, dbname="algorithm"): pym = my ...

  2. asp.net状态保持

    1.首先如果不是asp.net webform而只是一个纯粹的html页面和ashx一般处理程序的话,因为http协议的无状态,每一次的页面请求都会重新实例化一个页面对象(注意实例化页面对象其实是通过 ...

  3. 在mac console下 执行c++文件

    1 $ g++ -o NewFileName OldFileName.cpp -o is the letter O not zero NewFileName will be your executab ...

  4. 负值之美:负margin在页面布局中的应用

    本文转载自:http://www.topcss.org/?p=94,有修改. 负数给人总是一种消极.否定.拒绝之感,不过有时利用负margin可以达到奇妙的效果,今天就表一表负值在页面布局中的应用.这 ...

  5. 开始Java之旅

      从今天起,cgg将给大家讲讲Java这种神奇的东西.   至于配置环境变量,大家可以看看我的博客:环境变量上面有详细解释.   下面先给大家一个公式:    public class [文件名]{ ...

  6. CSS 关键的基础知识

    今晚看了 百度传课 一门关于CSS的课程, 感觉不错, 随手记了点儿笔记, 供以后查阅. =================================================== pos ...

  7. python 修改文件编码方式

    import chardet import os def strJudgeCode(str): return chardet.detect(str) def readFile(path): try: ...

  8. windows开启禁用网卡

    ' 在Windows中实现sudo命令--命令行环境中获取管理员权限 'ShellExecute 方法 '作用: 用于运行一个程序或脚本. '语法 ' .ShellExecute "appl ...

  9. spring mvc 静态资源版本控制

    spring bean 文件中增加 <bean class="cn.zno.smse.common.context.VersionServletContext">< ...

  10. Last Defence (2014 西安现场赛)

    http://acm.hust.edu.cn/vjudge/contest/view.action?cid=94237#problem/K Last Defence Time Limit:3000MS ...