Windbg是windows平台上强大的调试器
基础调试命令 - .dump/.dumpcap/.writemem/!runaway
Windbg是windows平台上强大的调试器,它相对于其他常见的IDE集成的调试器有几个重要的优势,
- Windbg可以做内核态调试
- Windbg可以脱离源代码进行调试
- Windbg可以用来分析dump文件
- Windbg支持丰富的调试扩展
以下是一些windbg安装和使用相关的文档,
- Installing and Configuring WinDbg (Windows Debug Tools)
- Windbg Tutorials
- Debugging Using Windbg (msdn)
- Windbg (wikipedia)
接下来我们会通过一系列的文章介绍windbg常用的调试命令的应用场景和基本用法,本文作为开始主要介绍命令.dump,.dumpcap,.writemem和!runaway的用法。
.dump命令
.dump命令可以帮助我们从一个运行的程序创建一个dump(扩展名.dmp)文件,然后将该文件拿到其他机器上进行分析。这在已经投入使用的生产环境中的程序调试非常有用,因为我们要在保证生产环境中的程序不受调试行为影响。
如果你运行.dump /?可以看到该命令提供了很多选项,一般情况下我们需要有关该被调试进程的所有信息,可以通过以下命令来创建dump文件。
0:000> .dump /ma c:\userdump.dmp
这个命令创建的dump包含了该进程的内存数据,句柄数据,未加载模块数据,线程时间信息。最终可以将生成的dmp文件转移到调试机上,该调试机上只要同样安装了windbg就可以进行相应的调试分析。
.dumpcab命令
多数情况下通过dump调试需要生产环境中运行模块对应版本的调试数据库文件(扩展名.pdb),如果涉及到微软开发的模块如.ntdll,user32.dll等,可以通过配置微软的symbol服务器来加载相应的symbol文件,但是如果涉及到的模块为其他开发方,并且该模块对应的symbol文件存在于生产环境或者其他环境中,那么我们可以将dump在该环境中通过windbg打开,配置好这些私有的symbol路径,然后运行.dumpcab命令将dump文件以及symbol文件一起打包,然后再拿到调试机上进行调试。
微软的symbol服务器路径配置
SRV*your local symbol folder*http://msdl.microsoft.com/download/symbols
.dumpcab命令需要在打开dump文件时运行,
0:000> .dumpcab -a fulldump
Creating a cab file can take a VERY VERY long time
.Ctrl-C can only interrupt the command after a file has been added to the cab.
Adding C:\dump.dmp - added
Adding c:\fibo.pdb - added
Wrote fulldump
打开该cab文件可以看到里面包含了dump文件以及对应的private symbol
接下来我们就可以在调试机上调试问题了。
.writemem命令
.writemem命令允许我们将内存或dump中的内容存成文件。这个命令经常用在我们希望通过其他工具来查看dump中加载的文件,比如我们想通过反汇编工具查看某些模块代码,或者希望打开内存中加载的文件查看其中的具体内容。
例如以下实例中,通过lm命令列出内存中加载的模块列表,然后通过.writemem命令将其中的模块存成文件。

0:000> lm
start end module name
010a0000 01124000 fibo C (private pdb symbols)
75270000 753a0000 kernel32 (deferred)
754a0000 75546000 KERNELBASE (deferred)
774a0000 775f7000 ntdll (export symbols) ntdll.dll
0:000> ? 01124000-010a0000
Evaluate expression: 540672 = 00084000
0:000> .writemem c:\fibo.exe 010a0000 L 00084000
Writing 84000 bytes........................................................................................................................................................................................................................................................................
0:000> .writemem c:\fibo.exe 010a0000 (01124000-0x1)
Writing 84000 bytes........................................................................................................................................................................................................................................................................

.writemem可以通过以上两种方式存储文件,第一种是指定起始地址和长度,第二种是指定其实和终止地址。
!runaway命令
!runaway是一个用来查看各个线程在用户态和内核态占用cpu时钟信息的命令,经常应用在查看高CPU使用率问题中,以下是runaway命令的输出实例,我们可以看到线程2:12a0占用CPU最长时间,当我们遇到高CPU使用率问题的时候,可以通过隔段时间抓取多组dump的方式然后查看各个线程在不同dump中runaway输出信息,从而找出占用cpu最多的线程。

0:026> !runaway
User Mode Time
Thread Time
2:12a0 0 days 0:04:26.668
10:24fc 0 days 0:00:04.711
15:25b8 0 days 0:00:03.010
9:888 0 days 0:00:02.870
14:25b4 0 days 0:00:01.185
8:1c9c 0 days 0:00:00.639
11:1350 0 days 0:00:00.624
13:9d0 0 days 0:00:00.483
7:2758 0 days 0:00:00.327
1:27f4 0 days 0:00:00.296
3:26b0 0 days 0:00:00.109
21:740 0 days 0:00:00.062
17:cd0 0 days 0:00:00.031
24:158 0 days 0:00:00.015
0:1de0 0 days 0:00:00.015
26:25c8 0 days 0:00:00.000
25:2f0 0 days 0:00:00.000
23:b08 0 days 0:00:00.000
22:2584 0 days 0:00:00.000
20:26c0 0 days 0:00:00.000
19:1a78 0 days 0:00:00.000
18:1228 0 days 0:00:00.000
16:1c34 0 days 0:00:00.000
12:724 0 days 0:00:00.000
6:17b0 0 days 0:00:00.000
5:fb8 0 days 0:00:00.000
4:277c 0 days 0:00:00.000

如果你希望看到内核态对应的cpu使用率,可以加上相应的flag如下,

0:028> !runaway ff
User Mode Time
Thread Time
2:12a0 0 days 0:04:46.230
10:24fc 0 days 0:00:04.711
15:25b8 0 days 0:00:03.088
9:888 0 days 0:00:03.057
14:25b4 0 days 0:00:01.248
8:1c9c 0 days 0:00:00.639
11:1350 0 days 0:00:00.624
13:9d0 0 days 0:00:00.483
7:2758 0 days 0:00:00.343
1:27f4 0 days 0:00:00.296
3:26b0 0 days 0:00:00.109
21:740 0 days 0:00:00.078
23:158 0 days 0:00:00.062
17:cd0 0 days 0:00:00.031
27:274c 0 days 0:00:00.015
0:1de0 0 days 0:00:00.015
28:2124 0 days 0:00:00.000
26:f98 0 days 0:00:00.000
25:15c 0 days 0:00:00.000
24:2f0 0 days 0:00:00.000
22:2584 0 days 0:00:00.000
20:26c0 0 days 0:00:00.000
19:1a78 0 days 0:00:00.000
18:1228 0 days 0:00:00.000
16:1c34 0 days 0:00:00.000
12:724 0 days 0:00:00.000
6:17b0 0 days 0:00:00.000
5:fb8 0 days 0:00:00.000
4:277c 0 days 0:00:00.000
Kernel Mode Time
Thread Time
2:12a0 0 days 0:01:04.615
15:25b8 0 days 0:00:04.165
14:25b4 0 days 0:00:01.716
13:9d0 0 days 0:00:00.390
8:1c9c 0 days 0:00:00.280
11:1350 0 days 0:00:00.171
10:24fc 0 days 0:00:00.156
7:2758 0 days 0:00:00.156
3:26b0 0 days 0:00:00.140
23:158 0 days 0:00:00.046
9:888 0 days 0:00:00.046
1:27f4 0 days 0:00:00.046
21:740 0 days 0:00:00.031
19:1a78 0 days 0:00:00.031
24:2f0 0 days 0:00:00.015
17:cd0 0 days 0:00:00.015
0:1de0 0 days 0:00:00.015
28:2124 0 days 0:00:00.000
27:274c 0 days 0:00:00.000
26:f98 0 days 0:00:00.000
25:15c 0 days 0:00:00.000
22:2584 0 days 0:00:00.000
20:26c0 0 days 0:00:00.000
18:1228 0 days 0:00:00.000
16:1c34 0 days 0:00:00.000
12:724 0 days 0:00:00.000
6:17b0 0 days 0:00:00.000
5:fb8 0 days 0:00:00.000
4:277c 0 days 0:00:00.000

希望以上内容对您有所帮助
Windbg是windows平台上强大的调试器的更多相关文章
- 分享一些 Windows 平台上的神器
下面分享一些 Windows 平台上日常开发使用的软件,有些软件我自认为是神器,可以大大提高效率. 编辑器类软件 IntelliJ IDEA IntelliJ IDEA 内部集成 Java 开发环境, ...
- 在Windows平台上安装Node.js及NPM模块管理
1. 下载Node.js官方Windows版程序:http://nodejs.org/#download 从0.6.1开始,Node.js在Windows平台上提供了两种安装方式,一是.MSI安 ...
- MySQL 在Windows平台上的安装及实例多开
MySQL在Windows平台上的安装及实例多开 by:授客 QQ:1033553122 测试环境 Win7 64 mysql-5.7.20-winx64.zip 下载地址: https://cd ...
- 如何在微软Windows平台上打造出你的Linux开发环境(转载)
如何在微软Windows平台上打造出你的Linux开发环境 投递人 itwriter 发布于 2013-12-10 11:18 评论(1) 有348人阅读 原文链接 [收藏] « » 英文原文: ...
- 在windows平台上构建自己的PHP(php5.3+)
这是一篇翻译的文章,原文参见:https://wiki.php.net/internals/windows/stepbystepbuild 顺便提一句,wiki.php.net有很多精彩的内容,想深入 ...
- (转)在Windows平台上安装Node.js及NPM模块管理
本文转载自:http://www.cnblogs.com/seanlv/archive/2011/11/22/2258716.html 之前9月份的时候我写了一篇关于如何在Windows平台上手工管理 ...
- cygwin -- 在windows平台上运行的unix模拟环境
cygwin是一个在windows平台上运行的unix模拟环境,是cygnus solutions公司开发的自由软件(该公司开发了很多好东西,著名的还有eCos,不过现已被Redhat收购).它对于学 ...
- 【摘录】在Windows平台上使用Objective-C
虽然到目前为止最好的Objective-C 编码平台来自苹果公司,但它们绝不仅适用于苹果公司的平台.Objective-C 在Linux.BSD 甚至Windows 等其他平台都有相当久远的历史.根据 ...
- C++程序在Windows平台上各种定位内存泄漏的方法,并对比了它们的优缺点
一.前言 在Linux平台上有valgrind可以非常方便的帮助我们定位内存泄漏,因为Linux在开发领域的使用场景大多是跑服务器,再加上它的开源属性,相对而言,处理问题容易形成“统一”的标准.而在W ...
随机推荐
- MapReduce 编程模型
一.简单介绍 1.MapReduce 应用广泛的原因之中的一个在于它的易用性.它提供了一个因高度抽象化而变得异常简单的编程模型. 2.从MapReduce 自身的命名特点能够看出,MapReduce ...
- 在SQL Server中对视图进行增删改
原文:在SQL Server中对视图进行增删改 Lesktop开源IM发布以后,有一些网友问及如何在嵌入IM后与自己网站的用户系统整合(即如何让嵌入的IM直接使用网站原有的用户数据库,而不需要将已有的 ...
- 多线程学习之二坚不可摧模式Immutable pattern
Immutable pattern[坚不可摧模式] 一:immutable pattern的参与者--->immutable(不变的)参与者 1.1:immutable参与者是一个 ...
- 一个简单的dom查询函数
var regid = /^#([\w-]*)$/, regClass = /^\.([\w-]*)$/, regName = /^(div|a|p|ul|li|input|select|docume ...
- 快速构建Windows 8风格应用26-本地应用数据
原文:快速构建Windows 8风格应用26-本地应用数据 本篇博文主要介绍如何获取应用的设置和文件容器.如何将数据写入设置.如何从设置中获取数据.如何删除设置中数据.如何将数据写入文件.如何从文件中 ...
- 过度补脑系列:Nokia的不归路
没有数据,没有调查,只是突然想起诺基亚... 23号的一节酱油课,脑海中突然闪过两个关键字--nokia & android 于是用手机百度了一下,竟然真的出了新机型,NokiaX,X东24日 ...
- 数据库备份还原工具EMS SQL Angel for SQL Server发布1.3版本
EMS公司,是专门从事企业数据库以及内置于多层次客户服务器结构自动化开发.其EMS SQL Angel for SQL Server工具,便是SQL Servers数据库数据备份还原工具,并且还能使用 ...
- 常见ActiveX控件下载大全
ActiveX是微软对于一系列策略性面向对象程序技术和工具的称呼,ActiveX控件可以在Windows窗体和Web程序上使用,所以不管是什么语 言开发的应用程序只要在windows窗体和html页面 ...
- Floodlight 启动过程分析
1. 在Main中先是载入模块,启动REST服务,而后构建一个实现了IFloodlightProviderService接口的实例(即Controller)并执行: 2. 接下来进入Control ...
- uml系列(四)——类图
类图是uml的核心.学习类图,总共须要掌握三个部分:类:类之间的关系:类图怎么画. 首先,类.老规矩,先来张图. 类是什么:举个简单的样例:猫.狗.猪三个都是动物.这里面的"动物" ...