使用WinDug工具调试c#程序或c++程序的dmp崩溃文件,调试内存泄漏
1.调试c#程序内存泄漏步骤
- 设置symbol符号路径: SRV*c:\mysymbol* http://msdl.microsoft.com/download/symbols;d:/你的pdb文件路径 然后保存工作空间
- 加载dmp文件。
- 加载sos文件
.load C:\Windows\Microsoft.NET\Framework\v2.0.50727\sos
- 加载clr
.loadby sos clr
.load clr - 加载堆
!dumpheap –stat
- 根据堆的大小,判断是哪种类型的文件占用内存比较高
!dumpheap -type System.Double[]
- 调试相关的地址,找到调用堆栈
> !gcroot 31daa0d0
2.调试c++代码的内存泄漏
- 跟c#的前两步骤一样,加载文件
- 获取堆的概述信息,s的意思是summery
!heap –s
会得到下列数据:
Heap Flags Reserv Commit Virt Free List UCR Virt Lock Fast
(k) (k) (k) (k) length blocks cont. heap
08000002 97344 97296 97344 278 626 10 13 e - 比如程序会增长内存,那么堆的大小一般情况下会变大。这时候过几分钟或过几秒,再进行一下第二步,比较两次得到的信息,比较后找到有异常的项。 找到符合条件的特殊的堆代号,然后统计这个堆的句柄。stat是统计statistic的意思,h意思是handle。
!heap –stat –h
size #blocks total ( %) (percent of total busy bytes)
2cce0 - 16670000 (75.42)
200 2cce1 - 599c200 (18.86)
98 2ccdf - 1a9a468 (5.60) - 根据第三步的结果,会看到一个百分比列表,找到你认为不正常的数据,比如第一个,大小为800字节,块有2cce0个,总大小为16M,这个时候用过滤的方法,过滤大小为800的句柄。flt意思是filter过滤,s意思是size
!heap -flt s
HEAP_ENTRY Size Prev Flags UserPtr UserSize - state
60b79f8 0103 0000 [00] 060b7a10 00800 - (busy)
mscoreei!_iob
060ba168 0103 0103 [00] 060ba180 00800 - (busy) - 第四步会得到很多的信息,随便找一条试试,找到userPtr那一列,即用户指针。然后获取这个指针的所有信息。PageHeapOptions all information。如果找不到就换一条试试。一般情况下很容易找的。
!heap -p -a 060b7a10
MyTestD!MyTest::Dosomething+0x000000c6
- 第五步如果顺利的话,就可以看到一些方法了,然后就可以根据方法的全名去查看线程了
u MyTestD!MyTest::Dosomething+0x000000c6
- 第六步如果顺利的话就找到了基本的代码行数和对应的位置了
使用WinDug工具调试c#程序或c++程序的dmp崩溃文件,调试内存泄漏的更多相关文章
- 【c++】内存检查工具Valgrind介绍,安装及使用以及内存泄漏的常见原因
转自:https://www.cnblogs.com/LyndonYoung/articles/5320277.html Valgrind是运行在Linux上一套基于仿真技术的程序调试和分析工具,它包 ...
- 了解 JavaScript 应用程序中的内存泄漏
简介 当处理 JavaScript 这样的脚本语言时,很容易忘记每个对象.类.字符串.数字和方法都需要分配和保留内存.语言和运行时的垃圾回收器隐藏了内存分配和释放的具体细节. 许多功能无需考虑内存管理 ...
- 如何优化cocos2d/x内存使用和程序大小的程序
从最初的:http://www.himigame.com/iphone-cocos2d/1043.html 译者: 在我完毕第一个游戏项目的时候.我深切地意识到"使用cocos2d来制作游戏 ...
- 使用_CRTDBG_LEAK_CHECK_DF检查VC程序的内存泄漏(转)
我们知道,MFC程序如果检测到存在内存泄漏,退出程序的时候会在调试窗口提醒内存泄漏.例如: class CMyApp : public CWinApp{public:BOOL InitApplicat ...
- LeakCanary:简单粗暴的内存泄漏检測工具
差点儿每一个程序猿在开发的过程中都会遇到内存泄漏.那么我们怎样检測到app是否哪里出现内存泄漏呢?square公司推出了一款简单粗暴的检測内存泄漏的工具-- LeakCanary 什么是内存泄漏? 内 ...
- Linux下C程序的编辑,编译和运行以及调试
国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html 内部邀请码:C8E245J (不写邀请码,没有现金送) 国 ...
- 教你50招提升ASP.NET性能(三):使用Microsoft的PDBs调试和分析外部的程序集和库
(3)Use Microsoft’s PDBs to debug or profile external assemblies or libraries 招数3: 使用Microsoft的PDBs调试 ...
- Java程序员应该知道的10个Eclipse调试技巧
Eclipse是众多Java程序员实用的开发工具,其中开发技巧也是繁多,但作为优秀的Java程序员,需要掌握最起码的调试技巧. 1 条件断点 2 异常断点 3 监视点 4 评估/检查 5 修改变量值 ...
- 使用CefSharp在.Net程序中嵌入Chrome浏览器(六)——调试
chrome强大的调试功能令许多开发者爱不释手,在使用cef的时候,我们也可以继承这强大的开发者工具. 集成调试: 我们可以使用如下函数直接使用集成在chrome里的开发者工具 _chrome.Sho ...
随机推荐
- HDU 5387 Clock(分数类+模拟)
题意: 给你一个格式为hh:mm:ss的时间,问:该时间时针与分针.时针与秒针.分针与秒针之间夹角的度数是多少. 若夹角度数不是整数,则输出最简分数形式A/B,即A与B互质. 解析: 先计算出总的秒数 ...
- js如何使用正则表达式验证电话号码(可选区号)和邮箱?(分步骤)
js如何使用正则表达式验证电话号码(可选区号)和邮箱?(分步骤) 一.总结 js进阶正则表达式16电话号码和邮箱正则(分类解决邮箱验证)(分组加?解决电话号码区号选择问题)([\w\.-]中括号解决邮 ...
- mui常用功能链接地址
1.下拉刷新mui.pullToRefresh插件http://ask.dcloud.net.cn/article/12152.打包app权限列表http://ask.dcloud.net.cn/ar ...
- 如何使用Name对象,包括WorkspaceNames和DatasetNames
转自chanyinhelv原文 如何使用Name对象,包括WorkspaceNames和DatasetNames 第一原文链接 该博主还有很多有关arcgis二次开发的不错的文章. 如何使用Name对 ...
- Android BlueDroid(一):BlueDroid概述
关键词:bluedroid bluez作者:xubin341719(欢迎转载,请注明作者,请尊重版权,谢谢!)欢迎指正错误.共同学习.共同进步!! 一.名词解释:(实用信息添加中--) BTI F: ...
- Git提交到多个远程仓库(多看两个文档)
Git提交到多个远程仓库(多看两个文档) 一.总结 一句话总结: 二. Git提交到多个远程仓库(多看两个文档) 有两种做法,先看第一种 一.通过命令行进行操作 例如我有下面两个仓库: Mybatis ...
- Python 数组[],元组(),字典{}的异同
序列 Python有6中内建的序列,在这里我们重点讨论两种,数组和元组.所有序列都可以做某些特定的操作,大致上常用的是:加,乘,索引,分片以及检查某个元素是否属于序列的成员. Python还提供一些内 ...
- Opencv光流运动物体追踪
光流的概念是由一个叫Gibson的哥们在1950年提出来的.它描述是空间运动物体在观察成像平面上的像素运动的瞬时速度,利用图像序列中像素在时间域上的变化以及相邻帧之间的相关性来找到上一帧跟当前帧之间存 ...
- 关于Dagger 2的文章汇总
首先是我真正看懂了的第一篇文章 代码GG之家的 Dagger2图文详解 这篇文章很直接,还配有代码demo.至少我是看懂了. Dagger2 使用详解 这篇文章同样配有demo,同时文末还有很多有用的 ...
- 使用相对路径导入ado库的方法
作者:朱金灿 来源:http://blog.csdn.net/clever101 常用的导入ado库的语句: #import "c:\program files\common files\s ...