memwatchVS2008.怎么查该死的内存泄露

memwatch  时间:2021-07-27  阅读:()

什么时候发生内存泄漏

(1). 常发性内存泄漏。

发生内存泄漏的代码会被多次执行到,每次被执行的时候都会导致一块内存泄漏。

(2). 偶发性内存泄漏。

发生内存泄漏的代码只有在某些特定环境或操作过程下才会发生。

常发性和偶发性是相对的。

对于特定的环境,偶发性的也许就变成了常发性的。

所以测试环境和测试方法对检测内存泄漏至关重要。

(3). 一次性内存泄漏。

发生内存泄漏的代码只会被执行一次,或者由于算法上的缺陷,导致总会有一块仅且一块内存发生泄漏。

比如,在类的构造函数中分配内存,在析构函数中却没有释放该内存,所以内存泄漏只会发生一次。

(4). 隐式内存泄漏。

程序在运行过程中不停的分配内存,但是直到结束的时候才释放内存。

严格的说这里并没有发生内存泄漏,因为最终程序释放了所有申请的内存。

但是对于一个服务器程序,需要运行几天,几周甚至几个月,不及时释放内存也可能导致最终耗尽系统的所有内存。

所以,我们称这类内存泄漏为隐式内存泄漏。

[编辑本段]内存泄漏检测工具 (附)部分内存泄漏检测工具 malloc-Linux和Solaris下对C和C++程序的简单的使用内存泄漏和malloc调试库。

2.Dmalloc-Debug Malloc Library. 3.Electric Fence-Linux分发版中由Bruce Perens编写的malloc()调试库。

4.Leaky-Linux下检测内存泄漏的程序。

5.LeakTracer-Linux、Solaris和HP-UX下跟踪和分析C++程序中的内存泄漏。

6.MEMWATCH-由Johan Lindh编写,是一个开放源代码C语言内存错误检测工具,主要是通过的precessor来进行。

7.Valgrind-Debugging and profiling Linux programs, aiming at programs written in C and C++. 8.KCachegrind-A visualization tool for the profiling data generated by Cachegrind and Calltree. 9.IBM Rational PurifyPlus-帮助开发人员查明C/C++、托管.NET、Java和VB6代码中的性能和可靠性错误。

PurifyPlus 将内存错误和泄漏检测、应用程序性能描述、代码覆盖分析等功能组合在一个单一、完整的工具包中。

10.Parasoft Insure++-针对C/C++应用的运行时错误自动检测工具,它能够自动监测C/C++程序,发现其中存在着的内存破坏、内存泄漏、指针错误和I/O等错误。

并通过使用一系列独特的技术(SCI技术和变异测试等),彻底的检查和测试我们的代码,精确定位错误的准确位置并给出详细的诊断信息。

能作为Microsoft Visual C++的一个插件运行。

11.Compuware DevPartner for Visual C++ BoundsChecker Suite-为C++开发者设计的运行错误检测和调试工具软件。

作为Microsoft Visual Studio和C++ 6.0的一个插件运行。

12.Electric Software GlowCode-包括内存泄漏检查,code profiler,函数调用跟踪等功能。

给C++和.Net开发者提供完整的错误诊断,和运行时性能分析工具包。

13.Compuware DevPartner Java Edition-包含Java内存检测,代码覆盖率测试,代码性能测试,线程死锁,分布式应用等几大功能模块。

14.Quest JProbe-分析Java的内存泄漏。

15.ej-technologies JProfiler-一个全功能的Java剖析工具,专用于分析J2SE和J2EE应用程序。

它把CPU、执行绪和内存的剖析组合在一个强大的应用中。

16.BEA JRockit-用来诊断Java内存泄漏并指出根本原因,专门针对Intel平台并得到优化,能在Intel硬件上获得最高的性能。

Android studio如何分析内存泄漏,是否有自带的分析工具

Android studio是没有自带这个工具的,不能分析内存泄露。

需要用已经ROOT过的真机来获取APP运行过程中的内存信息,这需要获取该手机的最高权限。

如果没有这样的手机,或者没有相应的机型,可以去testbird上面试试云手机吧,上面的手机都是开放最高权限的,而且机型很全。

想在LINUX下学习C语言,该如何开始?

一、工具篇 “公欲善其事,必先利其器”。

编程是一门实践性很强的工作,在你以后的学习或工作中,你将常常会与以下工具打交道, 下面列出学习C语言编程常常用到的软件和工具。

  1、操作系统   在UNIX或Linux系统中学习C很方便,所以在开始您的学习旅程前请先选择一个UNIX或Linux操作系统,目前可供个人免费使用的UNIX或Linux系统有FreeBSD、RedHat Linux、SUSE Linux等,而且在安装包中还提供很多实用的工具,如:, make等。

  如果您一直使用Windows,身边又没有多余的机器安装UNIX,则可以使用VMware,通过VMware安装虚拟系统。

  2、编译工具   目前绝大多数Unix或Lnux系统都提供CC或GCC编译器,最简单命令格式如下:   -o hello hello.c   在unix shell环境中敲入上面的代码会将hello.c程序编译成可执行文件hello。

  3、make工具   如 GNU make、System V make 和 Berkeley make 是用来组织应用程序编译过程的基本工具,但是每个 make 工具之间又有所不同。

  大部分UNIX和Linux程序都是通过运行make来编译的。

  make工具会读取一个包含指令的文件(这个文件的名字通常都是 makefile 或 Makefile,不过后文中我们统一称之为 “makefile”),并执行各种操作来编译程序。

  4、调试工具   最简单的调试工具:为你的程序添加打印语句,在你对程序的运行机制有了一定的了解后,你可以实用一些工具帮助你进行调试,当然你得学习一下这些工具得使用,如:dbx,gdb等。

  还有一些内存工具可以帮你查找内存泄漏或缓冲区溢出等一些问题,如:memwatch,yamd等。

  5、其他工具 1)vi或vim   Unix下文本编辑器。

主要靠一堆命令来编辑文本文件,学Unix编程最好熟悉并熟练使用vi编辑器。

  当然在实际工作中,你可能需要一个集成编码环境或一个功能强大的图形化编辑工具。

  提供一个中文的vim在线手册:/   2)Secure shell/putty 一个支持ssh协议得客户端工具,多数情况下用来连接linux系统。

二、书籍篇   “书是人类进步得阶梯”。

学习一门新的知识,当然要选择几本适合自己得书籍,下面介绍一些我自己学习C语言使用过的书籍: 1.《C primer plus》 推荐理由:适合作为入门书和基本函数查询得参考资料。

本书最新版为第五版,以ANSI C99为标准详细介绍了C语言。

2.《The C programming_Language》 推荐理由:C语言之父得作品权威性毋庸置疑。

虽然书籍出版时间比较老,好像也没更新,不过仍不失为经典书籍,网上有这本书得英文电子版提供下载。

3.《C 专家编程》 推荐理由:本书可以帮助有一定经验的C程序员成为C编程方面的专家,最关键的是本书寓教于乐,让你充分享受编程的乐趣。

4.《C缺陷与陷阱》 推荐理由:书中所揭示的知识能帮助您绕过C语言自身得陷阱和缺陷,减少代码中许多常见的Bug。

5.《unix环境高级编程》   推荐理由:既然是UNIX环境下C编程,就不得不说说UNIX编程书籍。

  Stevens先生的《unix环境高级编程》是我竭力推荐的,也是我的案头必备(如果对网络编程有兴趣的,可以学习一下Stevens先生的《UNIX网络编程》两卷,如果觉得还不过瘾,可以再看看《TCP/IP详解》三卷)。

6.《计算机编程艺术》 推荐理由:算法大师得呕心沥血之作。

计划出版五卷书,目前好像已出版3卷。

对算法有兴趣得可以研究一下。

三、过程篇   1.学习C语法   语法的学习对于一个具有编程底子的来说,就很轻松了;即使你以前没有学习过其他编程语言,我相信有2个星期,你也能轻松搞定。

  需要注意的是,不要太纠缠于语言的细节,比如:运算符优先级与结合性的问题等。

2.学习C标准库   ANSI C库把函数分为不同的组,每个组都具有与之相关的头文件。

C语言标准库相对于其他语言,比如C++,Java来说是非常短小精悍的,但首先应着重对以下库进行学习:   ctype.h:字符处理   math.h:数学库   stdio.h:标准I/O库   stdlib.h:通用工具库   string.h:字符串处理   time.h:时间和日期   如果想了解完成的ANSI C库,你可以购买相关的书籍,这些书籍一般会详细介绍每个函数的用户和一些注意点;当然你也可以登陆/manual ... amp;page=index.html获取ANSI C库详细信息。

3.攻克C的难点 1)C语言声明: C语言的声明确实让我觉得恐怖,比较晦涩难懂,而且声明的形式和使用的形式还类似。

比如如下的声明恐怕就连很多熟悉C多年的程序员也不是一眼就能看出来的: char * const * (*next)(); 那么有没有一种好的记忆方法或规则来搞清楚呢,好像没有,如果有的话也不是这样折磨人了。

不过可以看看《C专家编程》第三章的内容,或许你会有所收获。

也只能多学多练了,所谓熟能生巧嘛,希望这个问题不要在你的心灵上留下阴影。

  2)数组与指针:   数组与指针的关系,在标准中并没有作很详细的规定,而且好多C入门的书籍在这个问题上并没有给出很详细的说明,所以会给人造成很多误解。

  对于这个问题,你可以参考《C缺陷与陷阱》4.5节和《C专家编程》第4,9,10章,相信你这里面的内容搞透彻,以后就不会再被这个问题搞迷惑。

  3)指针与内存:   如果你以后编写规模较大的程序,你可能发现这个问题可能会是你最大的烦恼,而且可能会是你消耗最多调试时间的事项。

  4)C版本的问题:   你得特别小心该问题,最好不要在你的程序中混合使用不同版本C的特性,否则会给你带来很迷惑的问题。

如果一定要用,你最好清楚自己在做什么。

  还有一些其他C中的难点和容易错误的地方,可以学习前人的一些经验。

以下是一个c FAQ的链接地址,相信在这篇文档中有你需要的大部分问题的解决方法。

/   4. UNIX环境编程   学习了以上内容之后,我相信,你就可以进行unix环境编程了。

不过你可能需要对操作系统理论有一点点的了解,这样学起来会比较轻松一些。

  Unix环境编程,你应该着重IO和进程两大块内容。

  《Unix环境高级编程》中对Unix环境编程有着非常详细且深入的论述,而且书中有大量实用性例子程序,不过可能得花上几个月得时间,好好啃一啃了。

在扎实掌握以上内容,不代表你得C语言学习支路已经完成,相反,才刚刚开始。

以后你需要用学到得知识去解决大量不同实际问题,在不断得实践过程中,你会近一步加深对C的理解。

有了以上基础之后,你会发现,在实践过程中需要的其他知识,你会非常快速的掌握。

如何定位 Node.js 的内存泄漏

一、定位node.js内存漏洞的工具: 工欲善其事必先利其器,在排查时,我们还是需要一些工具来帮忙的。

devTool 这个是今年初出的 Node.js 调试工具,基于 Electron 将 Node.js 和 Chromium 的功能融合在了一起。

操作起来比 node-inspector 方便,开放的 Timeline 功能还是比较实用的,虽然不是实时显示。

仅需要 devtool xxx.js,还可以通过 .devtoolrc 来进行参数定制,具体见 GitHub heapdump + chrome devTool 这个是比较传统的定位内存泄漏的组合。

heapdump 可以直接在代码中调用生成内存快照,然后将快照文件导入到 chrome devTool 进行分析,之后操作其实和前者就差不多了。

不过,这个方案和前者有一点区别就是,前者实际还是在浏览器环境中,所以生成的内存快照会有一些 DOM 对象的存在,会有一定的干扰。

而这个方案,是直接调用底层 V8 的方法,生成的快照只有 Node.js 环境中的对象。

memwatch 这个可以在代码里直接使用,实时检测内存动态,当发生内存泄漏的时候,会触发 ‘leak’ 事件,会传递当前的堆状态,配合 heapdump 有奇效。

二、定位问题: 用 devTool 的可以忽略下面的过程: 打开 Chrome Devtools ,进入到 Profiles 选项卡,点 Load 按钮,加载之前生成的快照。

对于内存快照,有四个视图,Summary,Comparison,Containment,Statistics,这里面常用的是前三个。

在 Summary 视图中,我们可以看到当前快照的全部信息,以及多个快照之间的信息。

在列表里显示的都是对象的构造函数名字,可以先忽略被括号包裹的对象,优先观察其他的对象,最后再来看他们。

后面的 shallow size 表示的是对象自身的大小,retained size 表示的是对象和它依赖对象的大小,一般是 GC 不可达的。

在 Comparison 视图中,我们可以进行多个快照之间的对比,这个用处比较大,如果我们将前两次快照进行对比,可能比较快速的定位出问题的对象。

注意观察 New、Deleted、Delta,如果是内存泄漏的对象,可能是一直在 New,而没有 Deleted。

在 Containment 视图中,我们可以查看整个 GC 路径,当然一般不会用到。

因为展开在 Summary 和 Comparison 列举的每一项,都可以看到从 GC roots 到这个对象的路径。

通过这些路径,你可以看到这个对象的句柄被什么持有,从而定位问题产生的原因。

值的注意的是,其中背景色黄色的,表示这个对象在 Javascript 中还存在引用,所以可能没有被清除。

如果是红色的,表示的是这个对象在 Javascript 中不存在引用,但是依然存活在内存中,一般常见于 DOM 对象,它们存放的位置和 Javascript 中对象还是有不同的,在 Node.js 中很少遇见。

VS2008.怎么查该死的内存泄露

部分工具 malloc-Linux和Solaris下对C和C++程序的简单的使用内存泄漏和malloc调试库。

2.Dmalloc-Debug Malloc Library. 3.Electric Fence-Linux分发版中由Bruce Perens编写的malloc()调试库。

4.Leaky-Linux下检测内存泄漏的程序。

5.LeakTracer-Linux、Solaris和HP-UX下跟踪和分析C++程序中的内存泄漏。

6.MEMWATCH-由Johan Lindh编写,是一个开放源代码C语言内存错误检测工具,主要是通过的precessor来进行。

7.Valgrind-Debugging and profiling Linux programs, aiming at programs written in C and C++. 8.KCachegrind-A visualization tool for the profiling data generated by Cachegrind and Calltree. 9.IBM Rational PurifyPlus-帮助开发人员查明C/C++、托管.NET、Java和VB6代码中的性能和可靠性错误。

PurifyPlus 将内存错误和泄漏检测、应用程序性能描述、代码覆盖分析等功能组合在一个单一、完整的工具包中。

10.ParasoftInsure++-针对C/C++应用的运行时错误自动检测工具,它能够自动监测C/C++程序,发现其中存在着的内存破坏、内存泄漏、指针错误和I/O等错误。

并通过使用一系列独特的技术(SCI技术和变异测试等),彻底的检查和测试我们的代码,精确定位错误的准确位置并给出详细的诊断信息。

能作为MicrosoftVisual C++的一个插件运行。

11.Compuware DevPartner for Visual C++ BoundsChecker Suite-为C++开发者设计的运行错误检测和调试工具软件。

作为Microsoft Visual Studio和C++ 6.0的一个插件运行。

12.Electric Software GlowCode-包括内存泄漏检查,code profiler,函数调用跟踪等功能。

给C++和.Net开发者提供完整的错误诊断,和运行时性能分析工具包。

13.Compuware DevPartner Java Edition-包含Java内存检测,代码覆盖率测试,代码性能测试,线程死锁,分布式应用等几大功能模块。

14.Quest JProbe-分析Java的内存泄漏。

15.ej-technologies JProfiler-一个全功能的Java剖析工具,专用于分析J2SE和J2EE应用程序。

它把CPU、执行绪和内存的剖析组合在一个强大的应用中。

16.BEAJRockit-用来诊断Java内存泄漏并指出根本原因,专门针对Intel平台并得到优化,能在Intel硬件上获得最高的性能。

LOCVPS-2021年6月香港便宜vps宽带升级,充值就送代金券,其它八折优惠!

LOCVPS怎么样?LOCVPS是一家成立于2011年的稳定老牌国人商家,目前提供中国香港、韩国、美国、日本、新加坡、德国、荷兰等区域VPS服务器,所有机房Ping延迟低,国内速度优秀,非常适合建站和远程办公,所有机房Ping延迟低,国内速度优秀,非常适合做站。XEN架构产品的特点是小带宽无限流量、不超售!KVM架构是目前比较流行的虚拟化技术,大带宽,生态发展比较全面!所有大家可以根据自己业务需求...

ZJI韩国BGP+CN2服务器,440元起

ZJI又上新了!商家是原Wordpress圈知名主机商:维翔主机,成立于2011年,2018年9月启用新域名ZJI,提供中国香港、台湾、日本、美国独立服务器(自营/数据中心直营)租用及VDS、虚拟主机空间、域名注册等业务。本次商家新上韩国BGP+CN2线路服务器,国内三网访问速度优秀,适用8折优惠码,优惠后韩国服务器最低每月440元起。韩国一型CPU:Intel 2×E5-2620 十二核二十四线...

LayerStack$10.04/月(可选中国香港、日本、新加坡和洛杉矶)高性能AMD EPYC (霄龙)云服务器,

LayerStack(成立于2017年),当前正在9折促销旗下的云服务器,LayerStack的云服务器采用第 3 代 AMD EPYC™ (霄龙) 处理器,DDR4内存和企业级 PCIe Gen 4 NVMe SSD。数据中心可选中国香港、日本、新加坡和洛杉矶!其中中国香港、日本和新加坡分为国际线路和CN2线路,如果选择CN2线路,价格每月要+3.2美元,付款支持paypal,支付宝,信用卡等!...

memwatch为你推荐
CA3445广东飞往宁夏飞机票或火车票或汽车票垃圾文件清理bat一键清理系统垃圾文件.bat 的原理美国大选投票实时数据美国大选每个州的选举人票多少是怎么定的智能公共广播系统智能广播系统怎么实现?flv转换avi怎样把视频flv格式转换成avi 、 mp4格式nero教程如何使用NERO刻碟魔兽世界密保卡魔兽世界密保卡绑定500人同时微信如何扩大到500人群盈科oa办公系统OA办公设备主要有哪些?该怎样安装和维护、。自建git服务器如何在mac系统下搭建git服务器
花生壳域名贝锐 亚洲大于500m buyvm a2hosting 荷兰服务器 bluehost 韩国空间 edis sugarsync rak机房 国外私服 Hello图床 亚洲小于500m 秒杀预告 佛山高防服务器 息壤代理 100mbps 四核服务器 中国电信宽带测速器 移动服务器托管 更多