windbg命令学习3
3、进程与线程:
既可以显示进程和线程列表,又可以显示指定进程或线程的详细信息。调试命令可以提供比taskmgr更详尽的进程资料,在调试过程中不可或缺。
3.1. 进程命令
进程命令包括以下:显示进程列表、进程环境块、设置进程环境。
多个命令可显示进程列表,但一般只能在特定情况下使用,它们是:|、.tlist、!process和!dml_proc
- | [进程号]
请注意这里的定语:被调试进程列表。大多数情况下调试器中只有一个被调试进程,但可以通过.attach或者.create命令同时挂载或创建多个调试对象。当同时对多个进程调试时,进程号是从0开始的整数。下图中显示了两个被调试的进程。
- .tlist [选项] [模块名]
.tlist命令显示当前系统中的进程列表,他是目前唯一可在用户模式下显示系统当前进程列表的命令。它有两个可选项:-v显示进程详细信息,-c只显示当前进程信息。
内核模式下同样可以使用.tlist,但更好的命令是!process。!process在内核模式下显示进程列表,和指定进程的详细信息,也能显示进程中的线程和调用栈内容
3.2.线程命令
命令“~”能够进行线程相关的操作。不带任何参数的情况下,它列出当前调试进程的线程。下图是计算器进程某时刻的线程列表:
||0:0:001> ~
# 0 Id: f78.374 Suspend: 0 Teb: 000007ff`fffdc000 Unfrozen
. 1 Id: f78.fb0 Suspend: 0 Teb: 000007ff`fffda000 Unfrozen
2 Id: f78.a4c Suspend: 0 Teb: 000007ff`fffd8000 Unfrozen
3 Id: f78.22c8 Suspend: 0 Teb: 000007ff`fff9a000 Unfrozen
4 Id: f78.2658 Suspend: 0 Teb: 000007ff`fffd4000 Unfrozen
5 Id: f78.cbc Suspend: 0 Teb: 000007ff`fff96000 Unfrozen
6 Id: f78.21ec Suspend: 0 Teb: 000007ff`fffd6000 Unfrozen
使用此命令可进行的线程操作包括:线程切换、线程环境、线程时间等
线程遍历
仍然是~命令。它除了能够作为线程列表命令外,还可用来对线程进行遍历,并执行指定命令。只需借助通配符“*”即可。如:
- ~*k
显示所有线程栈信息(此命令意指:对所有线程执行k指令)。下图中,当前进程共包含两个线程,显示了这两个线程各自的栈信息:
其他有用的遍历指令包括:
- ~*r
显示线程寄存器信息。
- ~*e
上面的e是execute(执行)的缩写,后可跟一个或多个Windbg命令。它遍历线程并对每个线程执行指定命令,如:
- ~*e k;r
此命令意为:在所用线程环境中(~*),分别执行(e)栈指令(k)和寄存器指令(r)。
线程时间
在软件调试的时候,若发现某线程占用执行时间过多,就需要当心是否有问题。线程执行时间的多少,其实就是占用CPU执行工作的时间多少。某线程占用越多,此长彼消,则系统中其它线程占用CPU的时间就越少。
线程的时间信息包括三个方面:自创建之初到现在的总消耗时间、用户模式执行时间、内核模式执行时间。需注意的是,消耗时间一定会远远大于用户时间+内核时间,多出来的是大量空闲时间(为Idle进程占用)。使用下面的命令查看线程时间:
- .ttime
- !runaway 7
在!runaway命令中加入标志值7,将显示线程的全部三种时间值。
这两个命令的区别之处是,.ttime只能显示当前线程的时间信息,!runaway能显示当前进程的所有线程时间。下图是这两个命令的使用情况:
0:009> .ttime
Created: Wed Aug 7 16:47:29.011 2013 (UTC + 8:00)
Kernel: 0 days 0:00:00.031
User: 0 days 0:00:00.046
0:009> !runaway 7
User Mode Time
Thread Time
2:604 0 days 0:00:51.729
4:600 0 days 0:00:47.159
0:4f4 0 days 0:00:00.031
3:61c 0 days 0:00:00.000
1:5e0 0 days 0:00:00.000
Kernel Mode Time
Thread Time
4:600 0 days 0:13:45.073
2:604 0 days 0:08:44.100
3:61c 0 days 0:00:00.000
1:5e0 0 days 0:00:00.000
0:4f4 0 days 0:00:00.000
Elapsed Time
Thread Time
0:4f4 16 days 0:14:02.254
4:600 16 days 0:14:02.207
3:61c 16 days 0:14:02.207
2:604 16 days 0:14:02.207
1:5e0 16 days 0:14:02.207
对上二图进行对比,能看出两个命令之间的功能差异。
windbg命令学习3的更多相关文章
- windbg命令学习2
一.windbg查看内存命令: 当我们在调试器中分析问题时, 经常需要查看不同内存块的内容以分析产生的原因, 并且在随后验证所做出的假设是否正确. 由于各个对象的状态都是保存在内存中的, 因此内存的内 ...
- windbg命令学习4
4.查看调用栈 k命令:显示的是一定数量的栈帧, 其中帧的数量是由.kframes命令来控制的, 默认值是256. 我们如何来判断函数的栈指针,参数地址和局部变量地址呢? 举一个简单的windbg的k ...
- windbg命令学习1
一.windbg 常用知识: 1. Windbg中的调试命令,分为三种:基本命令,元命令和扩展命令.基本命令和元命令是调试器自带的,元命令总是以“.”开头,而扩展命令是外部加入的,总是以感叹号“!”开 ...
- Windbg命令学习15(bp bm bu bl bc ba断点)
以下以skinhgy为例,windbg附加运行 1. bp 命令是在某个地址下断点, 可以 bp 0x7783FEB 也可以 bp MyApp!SomeFunction . 对于后者,WinDBG 会 ...
- Windbg命令脚本
命令脚本,就是将完成某个特定任务的相关命令组合在一起,保存在脚本文件里,加载到Windbg里执行,达到我们的目的.你可以理解为脚本就是一种语言,就像c或者汇编,但是他不需要编译器将其编译为可执行文件, ...
- 别出心裁的Linux命令学习法
别出心裁的Linux命令学习法 操作系统操作系统为你完成所有"硬件相关.应用无关"的工作,以给你方便.效率.安全.操作系统的功能我总结为两点:管家婆和服务生: 管家婆:通过进程.虚 ...
- Git版本控制软件结合GitHub从入门到精通常用命令学习手册(转)
简要参考:http://www.tuicool.com/articles/mEvaq2 http://gitref.org/zh/index.html GIT 学习手册简介 本站为 Git 学习参考手 ...
- penghui_031413 Bat命令学习
penghui_031413 Bat命令学习 基础部分:====================================================================== ...
- WinDbg 命令三部曲:(一)WinDbg 命令手册
本文为 Dennis Gao 原创技术文章,发表于博客园博客,未经作者本人允许禁止任何形式的转载. 系列博文 <WinDbg 命令三部曲:(一)WinDbg 命令手册> <WinDb ...
随机推荐
- zoj 1067
输入一组RGB颜色列表,每行一个颜色,是三个从0~255的整数 前16行是目标颜色组,-1 -1 -1表示结束 16组颜色以后接下来的几行是需要判断的,看它和哪个颜色的距离D最小,找出这个对应的颜 ...
- Web应用的部署
本文将介绍一些Web应用的部署: 部署规则 要成功地部署一个Web应用,必须遵循以下目录结构. 1.WEB-INF一定要直接放到应用上下文(Webapp)之下. 2.classes目录必须直接放在WE ...
- mysql主从同步从库同步报错
1.在从库上设置master_info信息时出错 mysql> change master to master_host='192.168.157.143',master_port=3306,m ...
- MySQL 有输入输出参数的存储过程实例
1.MySQL 有输入输出参数的存储过程实例 DELIMITER // DROP PROCEDURE IF EXISTS `test`.`p_getvalue` // CREATE PROCEDURE ...
- WdatePicker日历控件使用方法
1. 跨无限级框架显示 无论你把日期控件放在哪里,你都不需要担心会被外层的iframe所遮挡进而影响客户体验,因为My97日期控件是可以跨无限级框架显示的 示例2-7 跨无限级框架演示 可无限跨越框架 ...
- python--执行文件的绝对路径
1.__file__属性对应文件名. 2.os.path.realpath(__file__)这样就可以得到文件的绝对路径.
- 银行卡检测中心BCTC
BCTC是Banking Card Test Center的缩写. 银行卡检测中心(下称中心)经中国人民银行总行批准成立于1998年4月,作为一个独立的第三方专业技术检测机构,其主要职责是按照国际.国 ...
- C++ DLL导出函数的两种方法(导出序号那种方法,别人看不到函数名)
第一种就直接导出函数名如下代码: #ifdef__cplusplus #define TEXPORT extern "c" _declspec(dllexport) #dlse # ...
- 元素“Button”不是已知元素。原因可能是网站中存在编译错误,或者缺少web.config文件
最近开发的时候ASP控件都有波浪下划线,提示不是已知元素,搞得挺郁闷的.虽然不影响变异,不过就是不爽. 折腾N久...... 解决了,把FramWork平台换成3.5,问题解决,不知道为啥,求大神指点 ...
- Weinre - 远程调试工具
Weinre 代表Web Inspector Remote,是一种远程调试工具.借助于网络,可以在PC上直接调试运行在移动设备上的远程页面,中文意思是远程Web检查器,有了Wei ...