C程序添加ASAN编译选项

发布时间:2023年12月21日

目录

选项说明

环境变量配置

环境变量说明

示例

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)

测试结果

文章来源:https://blog.csdn.net/s18098934396/article/details/135034306
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。