在Clang的Controlling Code Generation 或 GCC的Program Instrumentation Options中提供了一系列的参数,可以帮程序解决一些常见的内存问题。
本文使用Clang。
AddressSanitizer
内存错误是C/C++的最常见的问题,可能导致程序诡异崩溃,十分难查。内存错误检查AddressSanitizer可用来查找如内存溢出,内存重叠等问题,会带来2倍的速度消耗。
开启方法:
XCode
Edit Scheme
->Run
->Diagnostics
->勾选Address Sanitizer
clang -fsanitize=address test.c
示例:
- AddressSanitizer: stack-buffer-overflow
- AddressSanitizer: heap-buffer-overflow
- AddressSanitizer: heap-use-after-free
- AddressSanitizer: strncpy-param-overlap: memory ranges
- AddressSanitizer: memory leak(仅支持linux)
UndefinedBehaviorSanitizer
对一些未定义行为的检查,如有符号整数溢出。可使用 UndefinedBehaviorSanitizer来检查。
开启方法:
XCode
在Other Warning Flags
(其他也可)添加: -fsanitize=undefined-trap -fsanitize-undefined-trap-on-error
clang -fsanitize=undefined-trap -fsanitize-undefined-trap-on-error undefined.c
未完待续
本文链接, 未经许可,禁止转载