WinDbg 调试工具的使用

标签: windbg 调试工具 | 发表时间:2011-11-15 16:29 | 作者:spring yang king
出处:http://www.cnblogs.com/

概述

项目接近尾声了,可是在运行时会有memory leak(内存泄露) bug.产品在运行一天后,内存增长致1.4G,而我们产品的初始内存才有70M,问题很严重,决定采用WinDbg工具来分析代码问题有原因到底在哪里.

WinDbg是微软发布的一款相当优秀的源码级(source-level)调试工具,可以用于Kernel模式调试和用户模式调试,还可以调试Dump文件。

WinDbg下载:

  Install Debugging Tools for Windows 32-bit Version
http://www.microsoft.com/whdc/devtools/debugging/installx86.mspx
  Install Debugging Tools for Windows 64-bit Versions
http://www.microsoft.com/whdc/devtools/debugging/install64bit.mspx

 

配置

在安装完WinDbg后,需要在我们开发电脑上配置两个环境变量值,_NT_ALT_SYMBOL_PATH(调试的bin目录)  和_NT_SYMBOL_PATH(symcache目录),如下图

_NT_ALT_SYMBOL_PATH(调试的bin目录):

1

_NT_SYMBOL_PATH(symcache目录)

2

 

接下来运行WinDbg

3

 

把要调试的进程加载进去

4

 

这时最好在内存溢出很明显的时候加载较好,等下调试时较明显.

以下适合调试C++代码(产品有用到C++库,是C++和C#一起写的代码,C#调用C++库)

运行命令

!heap -s

结果如下:

0:035> !heap -s
  Heap     Flags   Reserv  Commit  Virt   Free  List   UCR  Virt  Lock  Fast
                    (k)     (k)    (k)     (k) length      blocks cont. heap
-----------------------------------------------------------------------------
00250000 00000002    4096   3644   3672   1155   232     5    0      3   L 
    External fragmentation  31 % (232 free blocks)
00360000 00001002    1088     72     72      1     0     1    0      0   L 
00370000 00008000      64     12     12     10     1     1    0      0     
016b0000 00001002      64     44     44      5     1     1    0      0   L 
017d0000 00041002     256     12     12      4     1     1    0      0   L 
01920000 00001002      64     44     44      5     1     1    0      0   L 
01a30000 00041002     256     40     40     12     3     1    0      0   L 
01c50000 00001002      64     32     32     24     1     1    0      0   L 
01f00000 00001002    1088    452    456     93    22     2    0      0   L 
02030000 00001002    7232   4828   5012    459   106    24    0      0   L 
021c0000 00001002      64     20     20      5     2     1    0      0   L 
04bb0000 00041002    1280    308    308      5     1     1    0      0   L 
05360000 00001002     256     16     16      3     1     1    0      0   L 
054a0000 00001002     256     12     12      4     1     1    0      0   L 
055e0000 00001002     256     12     12      4     1     1    0      0   L 
05720000 00001002     256     12     12      4     1     1    0      0   L 
05860000 00001002     256     12     12      4     1     1    0      0   L 
059c0000 00001002    3136   1772   1772    566    37     1    0      0     
    External fragmentation  31 % (37 free blocks)
05ad0000 00001002     256     44     44      7     2     1    0      0   L 
05c10000 00001002     256     36     36     16     4     1    0      0   L 
080d0000 00001002    1088     56     84     47     4     3    0      0   L 
08740000 00001002    1024    524    628    480    14     7    0      0   L 
088b0000 00001002     256    160    200     25     5     2    0      0   L 
08dc0000 00001002      64     12     12      4     1     1    0      0   L 
09590000 00001002    1088    168    168      2     1     2    0      0   L 
0ce90000 00001002    1088     84     84     61     3     1    0      0   L 
-----------------------------------------------------------------------------

再运行命令 !heap –stat  -h  059c0000  因发现这个堆里有较大的内存占有量

结果如下图:

image 

 

再运行 !heap -flt s 64 631 来查看堆里的内存分配

结果如下图

image

 

 

找堆里相似度高有地址,如上图,我的相似度非常高.

再运行!heap -p -a 0c903fe0

结果如下图

image

 

就会把调用到DLL的方法显示出来,就是内存泄露的地方,由于出于项目的保密原因,涉及项目中的代码中的信息我去掉了.

 

 

这只是WinDbg众多功能中的一种,我把它记录下来,因为这把我们项目的内存从1.4G降到了109M.功劳很大.

 

作者:spring yang

出处:http://www.cnblogs.com/springyangwc/

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

作者: spring yang 发表于 2011-11-15 16:29 原文链接

评论: 6 查看评论 发表评论


最新新闻:
· LinkedIn在印度开设北美之外首个研发中心(2011-11-15 21:04)
· 三星首超诺基亚成为全球最大智能手机制造商(2011-11-15 21:03)
· 京东商城CEO刘强东:五年内超淘宝不实(2011-11-15 21:01)
· 调查称Kindle Fire成北美开发者最爱安卓平板(2011-11-15 20:42)
· 谷歌推Wifi退出工具 有助避免用户信息外泄(2011-11-15 20:16)

编辑推荐:移动应用必定不会长久

网站导航:博客园首页  我的园子  新闻  闪存  博问  知识库

相关 [windbg 调试工具] 推荐:

WinDbg 调试工具的使用

- king - 博客园-首页原创精华区
项目接近尾声了,可是在运行时会有memory leak(内存泄露) bug.产品在运行一天后,内存增长致1.4G,而我们产品的初始内存才有70M,问题很严重,决定采用WinDbg工具来分析代码问题有原因到底在哪里.. WinDbg是微软发布的一款相当优秀的源码级(source-level)调试工具,可以用于Kernel模式调试和用户模式调试,还可以调试Dump文件.

Windbg入门实战讲解

- - FreeBuf.COM | 关注黑客与极客
聚锋实验室:gongmo. windbg作为windows调试的神器. 是查看内核某些结构体,挖掘漏洞,调试系统内核,调试驱动等必不可少的工具. 但是由于windbg命令众多,界面友好程度较差,从而造成新人上手不易,望而却步. 本文抛砖引玉,从基础入手,讲解windbg. 注意:本文省略部分为:1.如何加载系统符号.

Windbg学习笔记 - 简书

- -
winsdksetup.exe,双击,选择. Debugging Tools for Windows安装. 64位系统抓64位进程dump,用64位windbg来分析. 64位系统抓32位进程dump,用32位windbg来分析. where sos.dll找到sos.dll路径. 这个错误的原因是用了32位的任务管理器抓的32位的dump文件.

gdb调试工具

- - CSDN博客系统运维推荐文章
查看帮助一是man 命令,二是进入 www.gnu.org,找到gdb的帮助文档(更详细). gcc -Wall -g main.c -o main,只有这样才能产生调试信息,包括core的调试信息.     run(r)  运行,执行到断点,重新用r,表示重新开始执行.     list(l)  列出源代码,l 2,l main,l 2,16(数字表示行数).

Windbg调试命令详解(1)

- - CSDN博客推荐文章
转载注明>> 【 作者:张佩】【 镜像: http://www.yiiyee.cn/Blog】. 用户成功安装微软Windows调试工具集后,能够在安装目录下发现四个调试器程序,分别是:cdb.exe、ntsd.exe、kd.exe和Windbg.exe. 其中cdb.exe和ntsd.exe只能调试用户程序,Kd.exe主要用于内核调试,有时候也用于用户态调试,上述三者的一个共同特点是,都只有控制台界面,以命令行形式工作.

Windbg调试命令详解(2)

- - CSDN博客推荐文章
转载注明>> 【 作者:张佩】【 镜像: http://www.yiiyee.cn/Blog】. 符号与源码是调试过程中的重要因素,它们使得枯燥生硬的调试内容更容易地调试人员读懂. 在可能的情况下,应该尽量地为模块加载符号和源码. 大部分情况下源码难以得到,但符号却总能以符号文件的形式易于得到.

使用Windbg和Python进行堆跟踪

- - FreeBuf.COM | 关注黑客与极客
这篇文章主要展示如何使用Windbg的Python脚本,以及如何建立一个基本堆模拟器. 我们将使用PyKd的python库文件,这就可以让我们使用python和Windbg的API进行交流. 首先你系统上要安装python2.7.10或者更早版本. 当前PyKd兼容的最高版本是2.7.10,并且稳定性很高.

Mobile Web调试工具Weinre

- - 移动开发 - ITeye博客
现在、将来,用移动设备上网越来越成为主流. 但对于开发者们来说,移动web的调试一直是个难题,前期可以使用模拟器来协助调试,但到了真机调试阶段就让人非常头痛. 而Weinre就是解决这难题的利器.   Weinre的本意是Web Inspector Remote,它是一种远程调试工具. 功能与Firebug、Webkit inspector类似,可以帮助我们即时更改页面元素、样式,调试JS等,下面就简单介绍下如何使用.

Web调试工具 Fiddler 教程

- - 互联网旁观者
Fiddler是最强大最好用的Web调试工具之一,它能记录所有客户端和服务器的http和https请求,允许你监视,设置断点,甚至修改输入输出数据. 使用Fiddler无论对开发还是测试来说,都有很大的帮助. Fiddler的基本介绍. Fiddler的官方网站:  www.fiddler2.com.

IE各个版本的调试工具

- - CSDN博客互联网推荐文章
最近使用JQuery开发的网页在IE6浏览器下出现样式不对,VS2010调试的时候有些不便. 无意之中看到由微软开发的 modern.ie,继而发现 BrowserStack,发现有很多的IE调试工具,就用微软开发的那款吧. Expression Web SuperPreview 4.0软件简介.