勇哥注:
最近开发的软件遇到一些问题,主要是爆cpu时间,这样的后果是软件运行时间一长就会越跑越慢,最终UI失去响应。
用vs来排除,目前只知道对可疑代码进行失能,再配合任务管理器观察 :cpu使用率, cpu时间,线程,句柄等参数来判断可疑代码是不是有问题。
如果搜索一下网络,貌似这个问题大部分答案只是对线程做sleep,没啥子可用的信息。
因此是时候涨点知识了,我把学习方向放在用WinDbg调试用户模式.net程序上。
系列贴子目录:
WinDbg 入门三:调试Dump
WinDbg 入门二:基本指令介绍
WinDbg 入门一(用户模式)
(一)windbg的三类命令:
1。 Regular command(d*, e*, b*, r) 常规命令, 是一些常用命令,很短,1或2个字符。
2。 Meta-Commands (.reboot, .reload) 原命令, 以.开头
3。 Extended Commands (!process, !thread,) 扩展命令, 以!开头。
对于扩展命令,请注意下面说的扩展,不加载你将无法使用一些扩展指令:
要先调试.net的程序,需要使用一个扩展的dll,它在C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727路径下,文件名是sos.dll。 有了它我们才能运行命令(!clrstack),拷贝一份到Windbg.exe所在的目录。 然后使用指令 .loadby sos clr 加载sos和clr
(二)windbg的配置
如果选择附加的方法(Attach)调试则不需要配置,直接开干。
如果使用Dump镜像文件进行调试则必须配置。
配置项就三项: 符号路径、源文件路径、执行文件路径
下面是勇哥调试自己程序用的符号路径。
C:\windbg练习\ConsoleApplication2\ConsoleApplication2\bin\Debug;SRV*C:\symbolscache*http://msdl.microsoft.com/download/symbols
下面这个是要调试程序的pdb符号文件目录。
C:\windbg练习\ConsoleApplication2\ConsoleApplication2\bin\Debug
下面这个是微软的线上符号库,当你的程序用到微软的组件时,需要由这个获取符号。
SRV*C:\symbolscache*http://msdl.microsoft.com/download/symbols
符号路径配置是最重要的一个步骤,这个错误,后面就不用玩了。
(三)控制和使用调试符号的指令
(1)加载
ld[ModuleName]
(2)重新加载
.reload
(3)设置选项
.symopt
!sym noisy | quiet | prompts | prompts off
!sym noisy 打开符号的查找模式,windbg会显示找符号的过程。关掉则使用!sym quiet
(4)查找符号
ln 0xXXXXX (地址)
(字母LN)
(5)检查符号
x nt!Dbgk*
例如: x kernel32!* 找kernel32符号
(6) 显示当前的符号路径配置
.sympath

