-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Description
1、断言前置条件
2、断言结果
3、断言复杂数据结构
4、系统不变性要素,这里主要讲了内存方面的例子
- 跟踪内存使用
- valgrind跟踪堆内存使用是否存在滥用,use after free之类的情况。
valgrind是要运行程序的,对性能影响大;它也不能对静态变量、全局变量进行分析,比如 var s = "xxx"; print(s[10])
- address sanitizer,地址消毒剂,意思就是编译时安插指令,对每次内存读写(不仅是堆内存)都做分析
这种办法就能同时分析堆内存问题、全局变量、静态变量问题。
ps:TSAN还能在上述基础上分析有没有data race,这个就不是编译时分析,它需要对程序进行织入,程序中上报内存读写事件到TSAN,TSAN状态机进行分析,如果检测到存在不受同步保护的对同一内存地址的操作,就证明存在datarace。
检测原理,就是利用vector time。
see:
Metadata
Metadata
Assignees
Labels
No labels