目录
选项 | 说明 |
-fsanitize=address | 开启内存越界检测 |
-fsanitize=leak | 开启内存泄漏检测 |
-fsanitize-recover=address | 一般后台程序为保证稳定性,不能遇到错误就简单退出,而是继续运行,采用该选项支持内存出错之后程序继续运行,需要叠加设置环境变量ASAN_ OPTIONS=halt_on_error=0才会生效;若未设置此选项,则内存出错即报错退出 |
export ASAN_OPTIONS=detect_odr_violation=0:halt_on_error=0:detect_leaks=1:malloc_context_size=15:log_path=/tmp/log/asan.log
环境变量? ? ? ? | 说明 |
log_path=./asan.log | 内存检查问题日志存放文件路径 |
detect_leaks=1 | 能内存泄露检测 |
malloc_context_size=10 | 内存错误发生时,显示的调用栈层数为10 |
halt_on_error=0 | 检测内存错误后继续运行 |
#include <stdio.h> #include <stdlib.h> #include <string.h> char g_test[4] = {0}; int main(int argc, char* argv[]) { char * value = malloc(sizeof(int)); char p = g_test[2]; printf("Hello, World! %c\n", p); free(value); free(value); return 0; }
cmake_minimum_required(VERSION 3.22) project(test C) set (CMAKE_C_COMPILER /usr/bin/gcc) add_definitions("-Wall -g") set(CMAKE_C_FLAGS "-O0 -ggdb -fsanitize=address -fsanitize-recover=address") add_executable(test main.c)