文章目录
-
- 1. 目的
- 2. 区分编译和链接选项
- 3. 在CMake中全局开启ASan
1. 目的
在 C/C++ 工程中, 得益于 Google 工程师开发的 Address Sanitizer 这一神器, 可以快速、准确的发现不规范的内存使用, 包括而不限于:
- 内存泄漏检查, 例如忘记释放, 或原本持有内存的的指针被赋予了新的地址
- 内存越界, 例如数组只有10个元素,访问第20个元素; 再比如 memcpy 时写入了超出 buffer 大小的长度
- double free: 重复释放 malloc 的内存
- …
要使用 Address Sanitizer 这一神器, 对于单个文件而言比较容易,甚至可以在 godbolt 网站上直接测试,无需本地环境: https://godbolt.org/z/cobzaYzo7