ASan(内存错误):
堆/栈越界、Use-After-Free、Double-Free
编译:-fsanitize=address
速度:慢 2x,内存多 2-3x
UBSan(未定义行为):
整数溢出、移位越界、空指针解引用
编译:-fsanitize=undefined
建议:所有项目 Debug 构建都应该开启
TSan(数据竞争):
多线程无锁编程的 Bug
编译:-fsanitize=thread
限制:不能和 ASan 一起用,要求全量重编
最佳实践:
Debug 构建:-fsanitize=address,undefined
CI 测试构建:-fsanitize=thread(单独跑)
生产构建:不要带 sanitizer(性能影响太大)