内存条检测工具(【分享吧】内存异常检查工具简介)
- 知识
- 2021-06-17
- 302热度
- 0评论
内存条检测工具
c/c++程序因其对内存的灵活访问,常常会引发一些内存异常问题;而一般core的地方往往还不是真真发生问题的地方,这就为调查带来难度;为此我们需要借助一些工具,来帮我们发现问题;目前常用的工具有valgrind和asan,这两个工具基本上对常见的内存问题,比如读写内存越界,内存泄露,double free,使用野指针等,都能够检测。
01
asan使用简介
Asan(Address-Sanitizier)早先是LLVM中的特性,自GCC 4.8版本以后加入到了GCC里面,安装对应版本的asan后,在gcc编译时加入如下参数,即可在程序运行时开启内存检测。
-fsanitize=address:开启内存越界检测
-fno-omit-frame-pointer : 保留栈指针,打印有用的堆栈信息
Asan默认在遇到内存问题时会退出,为了能叫程序继续运行,可以加入-fsanitize-recover=address编译参数,同时通过设置环境变量ASAN_OPTIONS=halt_on_error=0使其生效。
读写内存越界:
使用野指针:
Double free:
内存泄露:
02
Valgrind使用简介
Valgrind是一个工具集,内存异常检测工具memcheck是其中使用最广泛的;一般linux下需要安装valgrind(有yum源只需运行yun intall valgrind即可);valgrind内存检查运行命令如下:
Valgrind --tool=memcheck --leak-check=full ./可执行程序名
读写内存越界:
使用野指针:
Double free:
内存泄露:
03
总结
Asan和valgrind虽然都能够很好的对内存异常进行检测,但是个人觉得无论从性能上或者从功能上,甚至错误信息提示上,asan都比valgrind好。