TSan(ThreadSanitizer)是一个检测数据竞争的工具。它包含一个编译器插桩模块和一个运行时库。TSan开启后,会使性能降低5到15倍,同时使内存占用率提高5到10倍。
功能介绍
应用场景
TSan能够检测出如下问题:
-
数据竞争检测
数据竞争(Data Race)是指两个或多个线程在没有适当的同步机制情况下同时访问相同的内存位置,其中至少有一个线程在写入。数据竞争是导致多线程程序行为不可预测的主要原因之一。
-
锁错误检测
TSan 不仅能检测数据竞争,还能检测与锁相关的错误:
- 死锁(Deadlock):死锁是指两个或多个线程互相等待对方释放锁,导致程序无法继续执行。
- 双重解锁(Double Unlock):同一线程尝试解锁已经解锁的锁。
- 未持有锁解锁:一个线程尝试解锁一个它未持有的锁。
-
条件变量错误检测
条件变量用于线程之间的通信和同步,常见错误包括:
- 未持有锁等待:一个线程在未持有相关锁的情况下调用 wait。
- 未持有锁唤醒:一个线程在未持有相关锁的情况下调用 signal 或 broadcast。
错误报告
当 TSan 检测到错误时,它会生成详细的报告,包括:
- 错误类型:例如数据竞争、死锁等。
- 内存地址:涉及的内存地址。
- 线程信息:涉及的线程ID和线程创建的堆栈跟踪。
- 源代码位置:每一个内存访问的源代码位置和堆栈跟踪。
- 上下文信息:访问类型(读/写)、访问大小等。
使用约束
- TSan仅支持API 12及以上版本。
- TSan与ASan不可同时开启。
- TSan开启后会申请大量虚拟内存,其他申请大虚拟内存的功能(如gpu图形渲染)可能会受影响。
- TSan不支持静态链接libc或libc++库。
使能TSan
可通过以下两种方式使能TSan。
方式一
-
在运行调试窗口,点击Diagnostics,勾选Thread Sanitizer。
-
如果有引用本地library,需在library模块的build-profile.json5文件中,配置arguments字段值为“-DOHOS_ENABLE_TSAN=ON”,表示以TSan模式编译so文件。
方式二
-
修改工程目录下AppScope/app.json5,添加TSan配置开关。
"tsanEnabled": true
-
设置模块级构建TSan插桩。
在需要使能TSan的模块中,通过添加构建参数开启TSan检测插桩,在对应模块的模块级build-profile.json5中添加命令参数:
"arguments": "-DOHOS_ENABLE_TSAN=ON"
启用TSan
-
运行或调试当前应用。
-
当程序出现线程错误时,弹出TSan log信息,点击信息中的链接即可跳转至引起线程错误的代码处。
说明
当前使用call_once接口会存在TSan误报的现象,开发者可以在调用该接口的函数前添加__attribute__((no_sanitize(“thread”)))来屏蔽该问题。
最后呢
很多开发朋友不知道需要学习那些鸿蒙技术?鸿蒙开发岗位需要掌握那些核心技术点?为此鸿蒙的开发学习必须要系统性的进行。
而网上有关鸿蒙的开发资料非常的少,假如你想学好鸿蒙的应用开发与系统底层开发。你可以参考这份资料,少走很多弯路,节省没必要的麻烦。由两位前阿里高级研发工程师联合打造的《鸿蒙NEXT星河版OpenHarmony开发文档》里面内容包含了(ArkTS、ArkUI开发组件、Stage模型、多端部署、分布式应用开发、音频、视频、WebGL、OpenHarmony多媒体技术、Napi组件、OpenHarmony内核、Harmony南向开发、鸿蒙项目实战等等)鸿蒙(Harmony NEXT)技术知识点
如果你是一名Android、Java、前端等等开发人员,想要转入鸿蒙方向发展。可以直接领取这份资料辅助你的学习。下面是鸿蒙开发的学习路线图。
针对鸿蒙成长路线打造的鸿蒙学习文档。话不多说,我们直接看详细鸿蒙(OpenHarmony )手册(共计1236页)与鸿蒙(OpenHarmony )开发入门视频,帮助大家在技术的道路上更进一步。
- 《鸿蒙 (OpenHarmony)开发学习视频》
- 《鸿蒙生态应用开发V2.0白皮书》
- 《鸿蒙 (OpenHarmony)开发基础到实战手册》
- OpenHarmony北向、南向开发环境搭建
- 《鸿蒙开发基础》
- 《鸿蒙开发进阶》
- 《鸿蒙开发实战》
总结
鸿蒙—作为国家主力推送的国产操作系统。部分的高校已经取消了安卓课程,从而开设鸿蒙课程;企业纷纷跟进启动了鸿蒙研发。
并且鸿蒙是完全具备无与伦比的机遇和潜力的;预计到年底将有 5,000 款的应用完成原生鸿蒙开发,未来将会支持 50 万款的应用。那么这么多的应用需要开发,也就意味着需要有更多的鸿蒙人才。鸿蒙开发工程师也将会迎来爆发式的增长,学习鸿蒙势在必行! 自↓↓↓拿