学会用Clang来进行内存泄露分析
最近项目出现了内存泄露的问题,对于PC x86平台来说,一点点的内存泄露往往不会出错,很难进行debug调试。这个时候我们可以用到苹果给我们带来的神器--Clang编译器来进行内存泄露分析检测,开关打开之后,生成出来的二进制文件对内存泄露的敏感程度非常高,只要有内存泄露基本就会立马停止并进行报错。
由于项目是用CMake进行组织,因此使用CMake的方法来进行开关的打开,首先要让CC和CXX都变成Clang和Clang++(注意:在Clang下有时候会对inline函数报错,需要将inline去掉)。在build目录中输入
CC="clang" CXX="clang++" cmake ../ -DCMAKE_CXX_FLAGS="-fsanitize=address" -DCMAKE_BUILD_TYPE=Debug
其中的-DCMAKE_CXX_FLAGS="-fsanitize=address"就是打开这项内存泄露的检查开关(对于CMake来说,命令行的赋值对于CMAKE_CXX_FLAGS来说是真的在处理脚本之前做为保留,也就是说在进入CMakeLists.txt进行处理里面的flags的时候,此时你的CMAKE_CXX_FLAGS已经包含了-fsanitize=address了,你只需要在后期脚本的处理过程中注意每当set falgs的时候要set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${your_own_flags}"),维护好脚本中flags的追加过程就没有问题了),然后对项目进行编译,之后编译出来的文件你就可以正常运行,运行程序之后,它会去调用你path下Clang文件夹bin中的llvm-symbolizer进行符号读取,一有内存泄露它就会停止报错。然后传给终端的信息里面详细介绍了在内存的申请是在哪个线程哪个函数开始的,内存的删除是在哪个线程哪个函数进行的,内存最后的读取(即野指针的重复滥用最终导致内存泄露)是在哪个线程哪个函数进行的,这对于多线程的开发自然又是如虎添翼,希望你会和我一样喜欢这款工具。
学会用Clang来进行内存泄露分析的更多相关文章
- 关于内存泄露分析插件 MAT 的用法
		
关于内存泄露分析插件 MAT 的用法,建议大家有时间看一下,下面的文章 http://www.blogjava.net/rosen/archive/2010/05/21/321575.html htt ...
 - Android Studio 使用Memory Monitor进行内存泄露分析
		
在使用Android Studio进行内存泄露分析之前,我们先回顾一下Java相关的内存管理机制,然后再讲述一下内存分析工具如何使用. 一.Java内存管理机制 1. Java内存分配策略 Java ...
 - 基于HTML5的WebGL应用内存泄露分析
		
上篇(http://www.hightopo.com/blog/194.html)我们通过定制了CPU和内存展示界面,体验了HT for Web通过定义矢量实现图形绘制与业务数据的代码解耦及绑定联动, ...
 - 【转】.. Android应用内存泄露分析、改善经验总结
		
原文网址:http://wetest.qq.com/lab/view/107.html?from=ads_test2_qqtips&sessionUserType=BFT.PARAMS.194 ...
 - 记一次Java的内存泄露分析
		
当前环境 jdk == 1.8 httpasyncclient == 4.1.3 代码地址 git 地址:https://github.com/jasonGeng88/java-network-pro ...
 - JVM内存管理概述与android内存泄露分析
		
一.内存划分 将内存划分为六大部分,分别是PC寄存器.JAVA虚拟机栈.JAVA堆.方法区.运行时常量池以及本地方法栈. 1.PC寄存器(线程独有):全称是程序计数寄存器,它记载着每一个线程当前运行的 ...
 - Linux内存使用情况以及内存泄露分析之工具与方法
		
<Linux C/C++ Memory Leak Detection Tool> 1. 内存使用情况分析 1.1 系统总内存分析 通过cat /proc/meminfo,可用的物理内存=M ...
 - Java内存泄露分析和解决方案及Windows自带查看工具
		
Java内存泄漏是每个Java程序员都会遇到的问题,程序在本地运行一切正常,可是布署到远端就会出现内存无限制的增长,最后系统瘫痪,那么如何最快最好的检测程序的稳定性,防止系统崩盘,作者用自已的亲身经历 ...
 - JAVA内存泄露分析及解决
		
一,问题产生 项目采用Tomcat6.0为服务器,数据库为mysql5.1,数据库持久层为hibernate3.0,以springMVC3.0为框架,项目开发完成后,上线前夕进行稳定性拷机,测 ...
 
随机推荐
- 编写一个单独的Web Service for Delphi7(步骤)
			
1新建一个SOAP Server Application,在提示输入接口时输入MyHello,把所有文件保存在一个叫Ser的目录下,其中一个包含TWebModule1的文件保存为main.pas.在M ...
 - 原生JavaScript拖动div兼容多种浏览器
			
说句题外话,虽然博客园嵌入式氛围不行,Web前端氛围还是很好的.我又从 chinaunix 回来了. <html> <head> <script type="t ...
 - Fragmen横竖屏切换,导致页面混乱,oncreateView重复调用
			
在清单文件Activity设置属性 android:screenOrientation="landscape" android:configChanges="screen ...
 - 《Euclidea3》-Eta-07
			
Q: 分析:考虑到充分利用三等分和角度的信息,这里我们只需做出一个36°的角即可. 考虑一个顶角是36°的等腰三角形.如下图. 设AD=a1,CD=a2,根据相似,易得a1:a2=(√5-1)/2. ...
 - Binary Tree Preorder Traversal on LeetCode in Java
			
二叉树的非递归前序遍历,大抵是很多人信手拈来.不屑一顾的题目罢.然而因为本人记性不好.基础太差的缘故,做这道题的时候居然自己琢磨出了一种解法,虽然谈不上创新,但简单一搜也未发现雷同,权且记录,希望于人 ...
 - Fluent-EDEM耦合计算颗粒流动
			
虽然说Fluent提供了很多方法用于处理颗粒在流体中的运动行为,然而这些方法都有其各自的适用性.DPM适用于稀薄颗粒的情况,欧拉模型.Mixture模型及DDPM模型虽然可以考虑稠密颗粒相,但并不能考 ...
 - 慕课python3.5学习笔记
			
本文章中有部分代码为python2 慕课python入门 慕课python进阶 布尔值 布尔值可以用and.or和not运算. and运算是与运算,只有所有都为 True,and运算结果才是 True ...
 - Visual Studio的2个有趣的插件:声音控制和放屁:)
			
.NET Slave | Talk to, hear, touch and see your code介绍了2个有趣的Visual Studio的插件,你可以通过它们和你的代码对话. 声音控制(Voi ...
 - Shiro Quartz之Junit測试Session管理
			
Shiro的quartz主要API上提供了org.apache.shiro.session.mgt.quartz下session管理的两个类:QuartzSessionValidationJob和Qu ...
 - 【C语言天天练(二一)】内联函数
			
引言:调用函数时,一般会由于建立调用.传递參数.跳转到函数代码并返回等花费掉一些时间,C语言的解决的方法是使用类函数宏.在C99中,还提出了第二种方法:内联函数. 内联 ...