1.调试c#程序内存泄漏步骤

  1. 设置symbol符号路径: SRV*c:\mysymbol* http://msdl.microsoft.com/download/symbols;d:/你的pdb文件路径  然后保存工作空间
  2. 加载dmp文件。
  3. 加载sos文件  
    .load C:\Windows\Microsoft.NET\Framework\v2.0.50727\sos
    
  4. 加载clr
    .loadby sos clr
    .load clr
  5. 加载堆
    !dumpheap –stat
    
  6. 根据堆的大小,判断是哪种类型的文件占用内存比较高
    !dumpheap -type System.Double[]
    
  7. 调试相关的地址,找到调用堆栈
    > !gcroot 31daa0d0
    

2.调试c++代码的内存泄漏

  1. 跟c#的前两步骤一样,加载文件
  2. 获取堆的概述信息,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

  3. 比如程序会增长内存,那么堆的大小一般情况下会变大。这时候过几分钟或过几秒,再进行一下第二步,比较两次得到的信息,比较后找到有异常的项。 找到符合条件的特殊的堆代号,然后统计这个堆的句柄。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)

  4. 根据第三步的结果,会看到一个百分比列表,找到你认为不正常的数据,比如第一个,大小为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)

  5. 第四步会得到很多的信息,随便找一条试试,找到userPtr那一列,即用户指针。然后获取这个指针的所有信息。PageHeapOptions all information。如果找不到就换一条试试。一般情况下很容易找的。
    !heap -p -a 060b7a10
    

      

    MyTestD!MyTest::Dosomething+0x000000c6 
  6. 第五步如果顺利的话,就可以看到一些方法了,然后就可以根据方法的全名去查看线程了
    u MyTestD!MyTest::Dosomething+0x000000c6
  7. 第六步如果顺利的话就找到了基本的代码行数和对应的位置了

使用WinDug工具调试c#程序或c++程序的dmp崩溃文件,调试内存泄漏的更多相关文章

  1. 【c++】内存检查工具Valgrind介绍,安装及使用以及内存泄漏的常见原因

    转自:https://www.cnblogs.com/LyndonYoung/articles/5320277.html Valgrind是运行在Linux上一套基于仿真技术的程序调试和分析工具,它包 ...

  2. 了解 JavaScript 应用程序中的内存泄漏

    简介 当处理 JavaScript 这样的脚本语言时,很容易忘记每个对象.类.字符串.数字和方法都需要分配和保留内存.语言和运行时的垃圾回收器隐藏了内存分配和释放的具体细节. 许多功能无需考虑内存管理 ...

  3. 如何优化cocos2d/x内存使用和程序大小的程序

    从最初的:http://www.himigame.com/iphone-cocos2d/1043.html 译者: 在我完毕第一个游戏项目的时候.我深切地意识到"使用cocos2d来制作游戏 ...

  4. 使用_CRTDBG_LEAK_CHECK_DF检查VC程序的内存泄漏(转)

    我们知道,MFC程序如果检测到存在内存泄漏,退出程序的时候会在调试窗口提醒内存泄漏.例如: class CMyApp : public CWinApp{public:BOOL InitApplicat ...

  5. LeakCanary:简单粗暴的内存泄漏检測工具

    差点儿每一个程序猿在开发的过程中都会遇到内存泄漏.那么我们怎样检測到app是否哪里出现内存泄漏呢?square公司推出了一款简单粗暴的检測内存泄漏的工具-- LeakCanary 什么是内存泄漏? 内 ...

  6. Linux下C程序的编辑,编译和运行以及调试

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html 内部邀请码:C8E245J (不写邀请码,没有现金送) 国 ...

  7. 教你50招提升ASP.NET性能(三):使用Microsoft的PDBs调试和分析外部的程序集和库

    (3)Use Microsoft’s PDBs to debug or profile external assemblies or libraries 招数3: 使用Microsoft的PDBs调试 ...

  8. Java程序员应该知道的10个Eclipse调试技巧

    Eclipse是众多Java程序员实用的开发工具,其中开发技巧也是繁多,但作为优秀的Java程序员,需要掌握最起码的调试技巧. 1 条件断点 2 异常断点 3 监视点 4 评估/检查 5 修改变量值 ...

  9. 使用CefSharp在.Net程序中嵌入Chrome浏览器(六)——调试

    chrome强大的调试功能令许多开发者爱不释手,在使用cef的时候,我们也可以继承这强大的开发者工具. 集成调试: 我们可以使用如下函数直接使用集成在chrome里的开发者工具 _chrome.Sho ...

随机推荐

  1. HelloWorld RabbitMQ

    RabbitMQ入门-从HelloWorld开始 从读者的反馈谈RabbitMQ 昨天发完<RabbitMQ入门-初识RabbitMQ>,我陆陆续续收到一些反馈.鉴于部分读者希望结合实例来 ...

  2. 阿里云Java镜像:基本配置和总体说明

    本文中的内容,来自阿里云镜像系统自带的说明.  下次不想用镜像了,感觉也没有节省多少工作量. 一.软件 1.nginx /usr/local/nginx 2.tomcat-7 /var/tomcat/ ...

  3. Java程序猿的JavaScript学习笔记(5——prototype和Object内置方法)

    计划按例如以下顺序完毕这篇笔记: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScript ...

  4. EL表达式JSON应用

    由于之前在学校写的jsp页面都是夹杂着java代码的,所以之前写了个jsp,满满的<%%>和java代码,老师说那样太不美观了啊!!!要全部用EL表达式替代了.本人还是太笨了,弄了一上午才 ...

  5. uva 116 Unidirectional TSP【号码塔+打印路径】

    主题: uva 116 Unidirectional TSP 意甲冠军:给定一个矩阵,当前格儿童值三个方向回格最小值和当前的和,就第一列的最小值并打印路径(同样则去字典序最小的). 分析:刚開始想错了 ...

  6. 电子商务系统的设计与实现(十三):分页组件,从前到后,从JS到Java

    一.概述   学习实践Web开发5年多了,直到今天,我才算真正实现了最基本最常用的分页组件. 包括:    a.前端JS异步加载并渲染:    b.前端JSP.Freemarker.Struts标签渲 ...

  7. 【9210】找礼物(char* num[2000]的使用 get char num[i] = new char[1000])

    Time Limit: 10 second Memory Limit: 2 MB 问题描述 新年到了,突然间,就在那美丽的一霎那,你好友和你(K个人)的周围满是礼物,你发扬你帅气的风格,让你的好友先拿 ...

  8. 微信小程序唤起其他微信小程序 / 移动应用App唤起小程序

    微信小程序唤起其他微信小程序 / 移动应用App唤起小程序 1. 微信小程序唤起微信小程序 小程序唤起其他小程序很简单 先上链接 小程序跳转小程序 Navigator组件 推荐使用 小程序跳转小程序 ...

  9. node与webpack的process.env.NODE_ENV

    先看两篇文章 1.前端工程项目的NODE_ENV 2. Node 环境变量 process.env.NODE_ENV 之webpack应用 3.process.env.NODE_ENV 下面全部是在w ...

  10. ubuntu 16.0.4 中docker 部署 sqlserver 2017(四)

    1. 从 Docker Hub 中拉出 SQL Server 2017 Linux 容器映像 sudo docker pull mcr.microsoft.com/mssql/server:2017- ...