目录
选项说明
环境变量配置
环境变量说明
示例
C程序代码
Cmakelist.txt
测试结果
选项说明
选项 | 说明 |
-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 | 检测内存错误后继续运行 |
示例
C程序代码
#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; }
Cmakelist.txt
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)