C程序添加ASAN编译选项
2023-12-16 17:37:20
目录
选项说明
选项 | 说明 |
-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
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!