现代 C++ Bug Free 检查工具

转载https://mp.weixin.qq.com/s/A3p3n6OG4Yc_NihIW3lUcg

Google sanitizers。它带有三个子功能,分别是:ASAN、TSAN、UBSAN。开发过程中最常使用 ASAN,用于检查内存问题。

内存检查

ASAN 基本是开发新特性时必备的检查工具,可以在单元测试、端到端测试以及压力测试环节,暴露代码潜在的内存 BUG。

常用检查项

Use after free

Heap buffer overflow

Stack buffer overflow

Global buffer overflow

Use after return

Use after scope

Initialization order bugs

Memory leaks

使能内存检查

某些 ASAN 功能默认是关闭的。若需要启用,需要单独设置环境变量 ASAN_OPTIONS。

g++ -fsanitize=address -fno-omit-frame-pointer -O1 -g xxx.cc -o xxx

拓展阅读

https://github.com/google/sanitizers/wiki/AddressSanitizer

多线程检查

使用 TSAN,内存开销大约是 5-10x,执行时间开销大约是 2-20x。

常用检查项

simple-race

thread-hostile-reference-counting

race-on-a-complex-object

notification

publishing-objects-without-synchronization

reader-lock-during-a-write

race-on-bit-field

race-during-destruction

data-race-on-vptr

data-race-on-vptr-during-construction

race-on-free

race-during-exit

race-on-a-mutex

race-on-a-file-descriptor

使能多线程检查

g++ -fsanitize=thread -fno-omit-frame-pointer -O1 -g xxx.cc -o xxx

拓展阅读

https://github.com/google/sanitizers/wiki/ThreadSanitizerCppManual

未定义行为检查

未定义行为(UB,Undefined Behavior)可能最容易被开发人员忽视。如果触发 UB,程序行为是未可知的,

常用检查项

alignment

bounds、array-bounds、local-bounds

float-cast-overflow、float-divide-by-zero

integer-divide-by-zero、implicit-integer-conversion、signed-integer-overflow

pointer-overflow

nonnull-attribute、null、nullability-arg、nullability-assign、nullability-return

使能未定义行为检查

g++ -fsanitize=undefined -fno-omit-frame-pointer -O1 -g xxx.cc -o xxx

扩展阅读

https://en.cppreference.com/w/cpp/language/ub https://clang.llvm.org/docs/UndefinedBehaviorSanitizer.html

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值