1.!runaway
!runaway命令显示每个线程消费的时间
Bit 0 (0x1) 让调试器显示每个线程消耗的用户模式时间(user time),默认不加就是0x1
Bit 1 (0x2) 显示每个线程消耗的内核时间(kernel time)。
Bit 2 (0x4) 显示每个线程从创建开始经历了多少时间。
就是三者的组合:1 2 3 4 5 6 7
0:002> !runaway
User Mode Time
Thread Time
0:890 0 days 0:00:00.031
2:a00 0 days 0:00:00.000
1:1174 0 days 0:00:00.000
0:002> !runaway 1
User Mode Time
Thread Time
0:890 0 days 0:00:00.031
2:a00 0 days 0:00:00.000
1:1174 0 days 0:00:00.000
0:002> !runaway 2
Kernel Mode Time
Thread Time
0:890 0 days 0:00:00.062
2:a00 0 days 0:00:00.000
1:1174 0 days 0:00:00.000
0:002> !runaway 3
User Mode Time
Thread Time
0:890 0 days 0:00:00.031
2:a00 0 days 0:00:00.000
1:1174 0 days 0:00:00.000
Kernel Mode Time
Thread Time
0:890 0 days 0:00:00.062
2:a00 0 days 0:00:00.000
1:1174 0 days 0:00:00.000
0:002> !runaway 4
Elapsed Time
Thread Time
0:890 0 days 0:38:34.825
1:1174 0 days 0:38:34.793
2:a00 0 days 0:38:24.528
0:002> !runaway 7
User Mode Time
Thread Time
0:890 0 days 0:00:00.031
2:a00 0 days 0:00:00.000
1:1174 0 days 0:00:00.000
Kernel Mode Time
Thread Time
0:890 0 days 0:00:00.062
2:a00 0 days 0:00:00.000
1:1174 0 days 0:00:00.000
Elapsed Time
Thread Time
0:890 0 days 0:38:41.825
1:1174 0 days 0:38:41.793
2:a00 0 days 0:38:31.528
该扩展命令可以用来快速找出哪些线程循环失去控制消耗了太多CPU时间。输出中以调试器的内部线程号和16进制线程ID来标识每个线程。还会显示调试器ID,当然,主要用于分析dump文件
2 ~
波形符(~) 命令显示指定线程或当前进程中的所有线程的信息
这条命令显示所有线程
0:001>~
该命令也显示所有线程。
0:001>~*
下面的命令显示当前活动线程。
0:001>~.
下面的命令显示原始的产生异常的线程(或调试器附加到进程时活动的线程)。
0:001>~#
下面显示号码为2的线程。
0:001>~2
0:002> ~
0 Id: 17a4.eb4 Suspend: 1 Teb: 7ffdf000 Unfrozen
1 Id: 17a4.d4c Suspend: 1 Teb: 7ffde000 Unfrozen
. 2 Id: 17a4.aac Suspend: 1 Teb: 7ffdd000 Unfrozen
0:002> ~*
0 Id: 17a4.eb4 Suspend: 1 Teb: 7ffdf000 Unfrozen
Start: calc!WinMainCRTStartup (01012475)
Priority: 0 Priority class: 32 Affinity: f
1 Id: 17a4.d4c Suspend: 1 Teb: 7ffde000 Unfrozen
Start: winimhc!TGetLogConfig+0x507b (10012f7b)
Priority: 0 Priority class: 32 Affinity: f
. 2 Id: 17a4.aac Suspend: 1 Teb: 7ffdd000 Unfrozen
Priority: 0 Priority class: 32 Affinity: f
0:002> ~0
0 Id: 17a4.eb4 Suspend: 1 Teb: 7ffdf000 Unfrozen
Start: calc!WinMainCRTStartup (01012475)
Priority: 0 Priority class: 32 Affinity: f
0:002> ~#
. 2 Id: 17a4.aac Suspend: 1 Teb: 7ffdd000 Unfrozen
Priority: 0 Priority class: 32 Affinity: f
我们可以发现,~和~*还是有点区别的,~*会把入口函数和优先级都打印出来,
0 Id: 17a4.eb4 Suspend: 1 Teb: 7ffdf000 Unfrozen意思是0号线程,进程ID为17a4,线程ID为eb4,暂停数为1,未冻结状态
,每个线程都包含了一个暂停计数(Suspend Count),以及一个冻结/解冻(Frozen/Unfrozen)的状态。
暂停计数由Windows内核使用的值,可以通过SuspendThread和ResumeThread这两个系统函数来控制的,核心编程里说一个线程创建时,暂停次数为1,
当线程完全初始化后,系统就要查看CREATE_SUSPEND标志是否已经传递给CreateThread。如果该标志没有传递,系统便将线程的暂停计数递减为0,
该线程可以调度到一个进程中
也可以用~<tid>n增加暂停计数,用~<tid>m减少暂停计数,如下:
0:002> ~0n
0:002> ~
0 Id: 17a4.eb4 Suspend: 2 Teb: 7ffdf000 Unfrozen
1 Id: 17a4.d4c Suspend: 1 Teb: 7ffde000 Unfrozen
. 2 Id: 17a4.aac Suspend: 1 Teb: 7ffdd000 Unfrozen
0:002> ~0m
0:002> ~
0 Id: 17a4.eb4 Suspend: 1 Teb: 7ffdf000 Unfrozen
1 Id: 17a4.d4c Suspend: 1 Teb: 7ffde000 Unfrozen
. 2 Id: 17a4.aac Suspend: 1 Teb: 7ffdd000 Unfrozen
0:002> ~0m
0:002> ~
0 Id: 17a4.eb4 Suspend: 0 Teb: 7ffdf000 Unfrozen
1 Id: 17a4.d4c Suspend: 1 Teb: 7ffde000 Unfrozen
. 2 Id: 17a4.aac Suspend: 1 Teb: 7ffdd000 Unfrozen
0:002> ~1m
0:002> ~
0 Id: 17a4.eb4 Suspend: 0 Teb: 7ffdf000 Unfrozen
1 Id: 17a4.d4c Suspend: 0 Teb: 7ffde000 Unfrozen
. 2 Id: 17a4.aac Suspend: 1 Teb: 7ffdd000 Unfrozen
比如我只调用一次~0n,那么主线程的引用计数变为2了,我再调用g,主线程的引用计数变为1,我们的calc是运行不起来的!
冻结状态是调试器的状态,在window操作系统中是不支持这个概念,对于每个被冻结的线程,调试器将记住这个状态,并且在调试事件被处理之前增加线程的挂起计数,当调试事件被处理完毕时,挂起计数将被递减,对应的命令为:
冻结~<tid>f
解冻~<tid>u
冻结命令数量必须和解冻命令数量相等
分享到:
相关推荐
windbg调试命令 很详细,很适合windbg初学者。
windbg调试命令大全 Windbg是在windows平台下,强大的用户态和内核态调试工具。相比较于Visual Studio,它是一个轻量级的调试工具,所谓轻量级指的是它的安装文件大小较小,但是其调试功能,却比VS更为强大。它的...
Windbg调试命令详解 Windbg调试命令详解 Windbg调试命令详解 Windbg调试命令详解 Windbg调试命令详解 Windbg调试命令详解
Windbg 调试命令(内核+用户态程序)
作者有10多年编程,调试经验,详解关于Windows 平台下程序崩溃的Windbg调试方法及技巧;附带工具介绍 适合于分析C++等语言, .Net 平台等快速入门及提高
使用windbg调试windows crash 产生的dmp文件
windbg 调试器扩展。扩展后可以给页面下调试断点! windbg 调试器扩展。扩展后可以给页面下调试断点!
WINDBG调试介绍 方式
当学习windows驱动开发的入门者,经常使用windbg调试,进线程在驱动调试中占有很大的比重,初学者阅读这本pdf绝对是有帮助的!
windbg很不错的调试文档。对学习windbg调试很有帮助!!
自己搜集的windbg常用命令列表,希望对大家有用。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。...
浅析 WinDBG 调试器的使用.pdf
特别对于驱动开发者使用的WinDbg和KD这两个内核调试器(CDB和NTSD是用户态调试器)。本教程的目标是给予一个已经有其他调试工具使用经验的开发者足够信息,使其能通过参考WINDOWS调试工具的帮助文件进行内核调试。...
WinDBG调试技巧.ppt 基础介绍,还是可以看看的
windbg命令,windbg命令,windbg命令
windbg调试PPT,来自张同学,很好的东西
WinDbg调试程序崩溃 WinDbg调试程序崩溃
Windows下的驱动调试工具,挺方便的,用的比较多的是借助它分析蓝屏信息
windbg调试工具 , Windows开发工具, 无须多说。