当前位置: 首页> 汽车> 报价 > 今天重大新闻头条新闻军事_互联网保险中介平台_营销策划方案包括哪些内容_深圳疫情最新情况

今天重大新闻头条新闻军事_互联网保险中介平台_营销策划方案包括哪些内容_深圳疫情最新情况

时间:2025/7/11 0:27:03来源:https://blog.csdn.net/u011436427/article/details/145919125 浏览次数: 1次
今天重大新闻头条新闻军事_互联网保险中介平台_营销策划方案包括哪些内容_深圳疫情最新情况

文章目录

  • strace检测
  • asan内存检测
  • linux下gperf工具(tcmalloc)检查C/C++代码内存泄露问题
  • 参考

strace检测

(1)启动程序

(2)

strace -f -p <PID> -tt -e brk,mmap,mmap2,munmap
  • brk 变大 → 说明堆增长(malloc分配)。
  • mmap 变多但 munmap 没有减少 → 可能是 mmap 泄漏。

类似还有ltrace:

ltrace -p <PID> -e malloc,free,realloc

如果 malloc 数量远大于 free,说明可能有 内存泄漏。

asan内存检测

gcc和clang编译选项:主要是-fsanitize=address

gcc ex1.c -o ex1 -g -fsanitize=address -fsanitize-recover=address -fno-omit-frame-pointer -fno-common 

asan会在运行时检测内存问题,运行时需要添加几个环境变量:

ASAN_OPTIONS='detect_leaks=1:halt_on_error=0:alloc_dealloc_mismatch=0:log_path=/tmp/asan_pgsql.log' \
LSAN_OPTIONS='exitcode=0:suppressions=/tmp/asan_supp'
LD_PRELOAD=/usr/local/lib64/libasan.so \
./ex1
  • ASAN_OPTIONS:配置ASAN。
  • LSAN_OPTIONS:配置LSAN,有些LSAN特殊的配置加在这里,比如suppressions忽略一些文件。
  • halt_on_error:出现问题不停止程序运行。
  • alloc_dealloc_mismatch:不允许内存申请不配对的情况,例如malloc / delete。
    l- og_path:结果输出到文件中,不打印到标准输出。
  • exitcode:LSAN的配置,遇到问题不退出。
  • suppressions:LSAN支持不检查一些文件。
  • LD_PRELOAD:二进制可以不link libasan.so,加环境变量LD_PRELOAD即可。或者编译时Link libasan.so,可以省略该配置。

cmake

1. 编译宏添加set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=address")
2. 执行LD_PRELOAD=/usr/lib/gcc/x86_64-linux-gnu/11/libasan.so  ASAN_OPTIONS=halt_on_error=0:detect_leaks=1:malloc_context_size=15:log_path=./asan.log ./program# halt_on_error=0:检测内存错误后继续运行
# detect_leaks=1:使能内存泄露检测
# malloc_context_size=15:内存错误发生时,显示的调用栈层数为15
# log_path=/home/xos/asan.log:内存检查问题日志存放文件路径
# suppressions=$SUPP_FILE:屏蔽打印某些内存错误

tet case

#include <stdio.h>
#include <stdlib.h>
#include <string.h>int main()
{void *dst = malloc(8);void *src = "1234567";memcpy(dst, src, 8);printf("%s\n", (char *) dst);return 0;
}

编译

gcc ex1.c -o ex1 -g -fsanitize=address -fsanitize-recover=address -fno-omit-frame-pointer -fno-common

执行

ASAN_OPTIONS='halt_on_error=0:alloc_dealloc_mismatch=0:log_path=/tmp/asan_pgsql.log' \
LD_PRELOAD=/usr/local/lib64/libasan.so \
./ex1

结果

$ cat /tmp/asan_pgsql_01.log.652=================================================================
==652==ERROR: LeakSanitizer: detected memory leaksDirect leak of 8 byte(s) in 1 object(s) allocated from:#0 0x7f04db292f08 in __interceptor_malloc ../../../../libsanitizer/asan/asan_malloc_linux.cc:144#1 0x400853 in main /data02/mingjie/pgroot99/pgsrc/test/ex1.c:7#2 0x7f04dabdd554 in __libc_start_main (/lib64/libc.so.6+0x22554)SUMMARY: AddressSanitizer: 8 byte(s) leaked in 1 allocation(s).

linux下gperf工具(tcmalloc)检查C/C++代码内存泄露问题

  • linux下gperf工具(tcmalloc)检查C/C++代码内存泄露问题
  • GDB调试无行号,报dwarf error问题解决

交叉编译linux aarch64:

./configure --host=aarch64-linux-gnu CC=aarch64-linux-gnu-gcc CXX=aarch64-linux-gnu-g++  --prefix="$PWD/install"  --enable-frame-pointers make -j10 
make install

参考

  • asan内存检测工具实例
关键字:今天重大新闻头条新闻军事_互联网保险中介平台_营销策划方案包括哪些内容_深圳疫情最新情况

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: