C程序添加ASAN编译选项

本文介绍了如何在C程序中使用ASAN(AddressSanitizer)进行内存安全检测,包括环境变量配置如-leak和-address,以及`Cmakelist.txt`中的编译选项。通过示例展示了如何在代码中启用内存边界和泄漏检测,以及处理错误继续运行的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

选项说明

环境变量配置

环境变量说明

示例

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)

测试结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值