您的位置:起点软件下载编程开发编程工具windbg下载 v6.12 官方最新版

windbg下载 v6.12 官方最新版windbg下载 v6.12 官方最新版

软件大小:34.5M

软件官网:HomePage

用户评分:

软件类型:国产软件

运行环境:Win All

软件语言:简体中文

软件分类:编程工具

更新时间:2018/12/19

授权方式:免费软件

插件情况:无 插 件

平台检测 无插件 360通过 腾讯通过 金山通过 瑞星通过
编程工具
windbg是微软发布的一款相当优秀的源码级(source-level)调试工具,可以用于Kernel模式调试和用户模式调试,还可以调试Dump文件。它能够通过dmp文件轻松的定位到问题根源,可用于分析蓝屏、程序崩溃(IE崩溃)原因,是我们日常工作中必不可少的一个有力工具,学会使用它,将有效提升我们的问题解决效率和准确率。
windbg

【基本介绍】

配置WinDbg
运行WinDbg->菜单->File->Symbol File Path->按照下面的方法设置_NT_SYMBOL_PATH变量
在弹出的框中输入“C:\MyCodesSymbols; SRV*C:\MyLocalSymbols*http://msdl.microsoft.com/download/symbols”(按照这样设置,WinDbg将先从本地文件夹C:\MyCodesSymbols中查找Symbol,如果找不到,则自动从MS的Symbol Server上下载Symbols)。另一种做法是从这个Symbol下载地址中http://www.microsoft.com/whdc/devtools/debugging/symbolpkg.mspx,下载相应操作系统所需要的完整的Symbol安装包,并进行安装,例如我将其安装在D:\WINDOWS\Symbols,在该框中输入“D:\WINDOWS\Symbols”。(这里要注意下载的Symbols的版本一定要正确,在我的Win2003+Sp1上,我曾经以为安装Win2003+Sp2的Symbols可能会牛×点,但结果证明我错了,用WinDbg打开可执行文件时,提示“PDB symbol for mscorwks.dll not loaded;Defaulted to export symbols for ntdll.dll”的错误,我有重新装上Win2003+Sp1的Symbols, 现在一切运行正常^_^)

【调试准备】

为了测试 WinDbg 中使用 SOS 扩展命令,我创建了应用程序 "MemoryLeakApp.exe",Visual Studio 程序选择为 64 位环境编译。


"MemoryLeakApp.exe" 启动运行后可能占用内存600M。


此时,选择使用 64 位 WinDbg 来调试程序。我们先通过 Attach Process 方式来调试。



当然,如果我们使用了 32 位的 WinDbg 去 Attach 进程,会直接报错。

【WinDbg常用命令手册】

内置帮助命令
?

?   显示常规命令
? /D    通过 DML(Debugging Markup Language) 方式显示常规命令

.help
.help    显示 . 系列命令
.help /D 通过 DML 方式显示 . 系列命令
.help /D a* 通过 DML 方式显示所有以 'a' 字母开头的 . 系列命令


.chain
.chain 列出所有已加载的调试器扩展
.chain /D 通过 DML 方式列出所有已加载的调试器扩展


.extmatch
.extmatch /e ExtDLL FunctionFilter 显示调试器扩展的所有导出函数
.extmatch /D /e ExtDLL FunctionFilter 通过 DML 方式显示调试器扩展所有导出函数
.extmatch /D /e uext * 显示 uext 扩展中的所有导出函数


.hh
.hh 打开 WinDbg 的帮助文件
.hh Text 打开 WinDbg 的帮助文件,并自动搜索 Text 的内容
.hh dt 在 WinDbg 帮助文件中搜索 dt 命令

调试会话命令
.attach

.attach PID 附加到指定ID的进程

.detach
.detach 结束调试会话,被调试进程仍可继续运行


q
q 结束调试会话,同时终止被调试进程的进行
qq 结束调试会话,同时终止被调试进程的进行

.restart
.restart 重启被调试应用

一般信息命令
version

显示调试器版本信息和已加载的调试器扩展


vercommand
显示调试器启动文件的路径


vertarget
显示目标机器的版本


CTRL+ALT+V
打开或关闭 Verbose 模式开关,某些命令在此模式下可以给出更多详细信息

.formats
.formats Expression 显示数字的各种格式信息
.formats 5


.cls
清理屏幕
.last event显示最新的异常信息或事件信息

.effmach
.effmach 显示有效作用的机器信息
.effmach .
.effmach #
.effmach x86 | amd64 | ia64 | ebc

.time
显示系统记录的各种时间


.echo
.echo String 输出字符串
.echo "String"
.echo "Hello World"

符号加载命令
ld

ld ModuleName 加载指定模块的符号
ld * 加载所有模块的符号


!sym
!sym 获取符号加载状态
!sym noisy 让调试器显示符号搜索详细信息
!sym quiet 默认项,不显示符号搜索信息


.sympath
.sympath 显示和设置符号搜索路径
.sympath+ 增加符号搜索路径
.sympath+ C:\Symbols

.symopt
.symopt 显示当前符号可选项
.symopt+ Flags 添加符号可选项
.symopt- Flags 移除符号可选项

.symfix
.symfix 设置符号库路径
.sym+ DownstreamStore 添加符号库路径

x
x [Options] Module!Symbol 模式匹配符号信息
x /t .. 根据数据类型匹配
x /v .. 显示详细信息
x /a .. 按照地址排序
x /n .. 按照名称排序
x /z .. 按照大小排序
x *! 列出所有模块

x ntdll!* 列出 ntdll 模块

x /t /v ntdll!* 列出 ntdll 模块数据类型和符号类型


.reload
.reload 重新加载符号信息
.reload [/f | /v] /f 强制立即加载符号 /v 显示详细信息
.reload [/f | /v] Module Module 为指定模块加载符号信息
.reload /f @"ntdll.dll"
.reload /f @"C:\WINNT\System32\verifier.dll"

模块加载命令

lm

lm[ v | l | k | u | f ] [m Pattern] 显示已加载的模块
lm 显示所有加载和未加载的模块信息

lmv 显示已加载模块的详细信息
lml 同时显示加载的符号信息
lmk 显示内核模块信息
lmu 显示用户模块信息
lmf 显示镜像路径
lmm 匹配模块名称
lmD 使用 DML 方式显示

lmv m kernel32 显示 kernel32 模块详细信息


!dlls
!dlls 列出所有加载的模块和加载数量
!dlls -i 根据初始化顺序
!dlls -l 根据加载顺序(默认项)
!dlls -m 根据内存顺序
!dlls -v 显示更多详细信息
!dlls -c ModuleAddr 仅显示 ModuleAddr 地址的模块信息
!dlls -? 显示帮助
!dlls -v -c kernel32 显示 kernel32.dll 的信息

!lmi

!lmi Module 显示模块的详细信息,包括加载符号信息
!lmi kernel32 显示 kernel32.dll 模块的信息


异常分析命令
!analyze

!analyze -v 显示当前异常的详细信息
!analyze -hang 诊断线程调用栈上是否有任何线程阻塞了其他线程
!analyze -f 查看异常分析信息,尽管调试器并未诊断出异常


进程信息命令
!dml_proc

通过 DML 方式显示当前进程的信息


.tlist
显示当前所有进程


线程信息命令
~
~ 显示线程信息

~* [Command] 所有线程

~. [Command] 当前线程

~# [Command] 引发当前事件或异常的线程
~Number [Command] 显示指定序号的线程
~~[TID] [Command] 显示指定线程ID的线程
~Ns 切换到线程 N
~* k 显示所有线程的调用栈
~2 f 冻结2号线程
~# f 冻结引发异常的线程
~3 u 解除对3号线程的冻结
~2 k 显示2号线程的调用栈


~e
~* e CommandString 在所有线程上执行命令
~. e CommandString 在当前线程上执行命令
~# e CommandString 在引发异常的线程上执行命令
~Number e CommandString 在指定序号的线程上执行命令
~2e r; k; kd 相当于 ~2r; ~2k; ~2kd
~*e !gle 显示所有线程的最后一个错误信息


~f
~Thread f 冻结线程

~u
~Thread u 解除冻结线程

~n
~Thread n 挂起线程,增加线程挂起数量

~m
~Thread m 恢复线程,减少线程挂起数量

!teb
显示线程环境信息


!tls
!tls -1 -1 为显示当前线程所有的 slot 信息
!tls SlotIdx 显示指定的 slot 信息
!tls [-1 | SlotIdx] TebAddr


.ttime
显示线程时间信息


!runaway
[Flags: 0 | 1 | 2] 显示每个线程消耗的时间,用于快速的查找 CPU 时间消耗最多的线程
0 用户态时间
1 内核态时间
2 自线程创建起的时间间隔


!gle
!gle 显示当前线程的最后错误
!gle -all 显示所有线程的最后错误

!error
!error ErrValue 解析错误信息
!error ErrValue 1 将错误值作为 NTSTATUS 代码

堆栈信息命令
k

k [n] [f] [L] [#Frames] 显示调用栈信息
kn 调用栈包含帧号
kf 临近帧的距离
kL 忽略源代码
kb ... 最开始的 3 参数
kp ... 所有的参数,包括参数类型、名称和值
kP ... 所有的参数
kv ... FPO信息
kb 5 显示最开始的 5 个帧


kd
kd [WordCnt] 显示原始栈数据和可能的符号信息

kM
使用 DML 格式显示堆栈信息

.kframes
设置栈长度,默认是20(0x14)

.frame

.frame 显示当前帧
.frame # 指定帧号
.frame /r [#] 显示寄存器信息
.frame 2 显示帧号 2 的信息
.frame /r 0d 显示 0 帧中寄存器信息


!uniqstack
!uniqstack 显示所有线程的栈信息
!uniqstack [b|v|p] [n] b=前3个参数;v=FPO信息;p=所有参数;n=帧号
!uniqstack -? 显示帮助


!findstack
!findstack Symbol 找到包含符号或模块的栈
!findstack Symbol [0|1|2] 0=仅显示线程ID;1=线程ID和帧;2=全部的线程栈;
!findstack -? 显示帮助
!findstack clr 2 显示包含 clr 的所有栈的信息


扩展帮助命令
!Ext.help
常规扩展命令帮助


!Exts.help



!Uext.help
用户态模式扩展命令帮助


!Ntsdexts.help
用户态扩展命令帮助(OS相关)


!logexts.help
日志相关扩展


!clr10\sos.help
调试托管代码

!wow64exts.help
wow64调试器扩展

!Wdfkd.help
内核态驱动框架扩展

!Gdikdx.help
图形驱动扩展

!NAME.help
显示任何 NAME 名称的扩展命令的帮助

日志扩展命令

!logexts.help

显示所有日志扩展命令

!loge
!loge [dir] 打开日志功能,可选配置输出目录

!logi
初始化日志功能

!logd
关闭日志功能

!logo
!logo 列出日志配置信息
!logo [e|d] [d|t|v] 打开或关闭日志,d=调试器,t=文本文件,v=详细信息

!logc
!logc 列出所有日志类型
!logc p # 列出 # 中的日志类型
!logc [e|d] * 打开或关闭所有日志类型
!logc [e|d] # [#] [#] 打开或关闭日志类型 #

!logb
!logb p 打印缓冲区信息至调试器
!logb f 刷新缓冲区内容之日志文件

!logm
!logm 显示模块的包含或屏蔽列表
!logm [i|x] [DLL] [DLL] 指定模块的包含或屏蔽列表

【使用教程】 

Symbol设定
连基本的 Symbol 都没有设定, 要怎麽玩 Kernel 呀?
接下来我会 step by step 解说 Symbol 的设定方法
首先这里假设你已经把 WinDBG 安装好了
一. 启动 WinDBG 後, 你会在下面命令列看到 Debuggee not connected
好~, 开始建立连结 [File] -> [Kernel Debug] , 之後会出现对话盒
对话盒里面有个 Tab Control, 点选 Local 页签, 然後按 [确定]
假如你是第一次启动, 可能会出现一个对话盒, 会问你要不要储存 workspace,
按 [Yes], 这样就完成建立了一个 Debuggee 的连结
这时你可以输入 version, 看一下系统的相关资讯和 Debugger 的版本
二. 接下来要搞定 SymBol 设定, 这部分很重要, 你一定要了解
从 [File] -> [Symbol File Path], 或者按 Ctrl + S,
之後会出现一个以 Symbol Search Path 为 Title 的对话盒, 开始设定 SymBol 路径
输入 C:\Windows\Symbols;SRV*C:\Windows\Symbols*http://msdl.microsoft.com/download/symbols
然後按 [确定]
我先解说这个输入的用意, 它分成两部分
一个是 C:\Windows\Symbols
另一个是 SRV*C:\Windows\Symbols*http://msdl.microsoft.com/download/symbols
两个以分号 ";" 隔开的
其用意就是告诉 WinDBG 如果你在 C:\Windows\Symbols 这个目录下找不到 Symbol,
那麽就到 http://msdl.microsoft.com/download/symbols 这网址去找,
并且把找到的 Symbol File 下载到 C:\Windows\Symbols 目录底下 (SRV*C:\Windows\Symbols*)
这样就完成了 Symbol File Path 的设定了
有时候会有很多其它状况, 例如 WinDBG 会说找不到呀,
解决方法就是 reload (Reload Module)
在 Symbol File Path 的设定对话盒下面有个 reload 的 CheckBox,
把它打勾, 然後按 [确定], 让它自动重新载入
另外, 你也可以使用内建指令 .reload , 快速的 Reload Module
三. 教你如何一次性的完整下载所有 Symbol Files
平常我们都只是在查看 Ntdll 的函数, 或者查看 Service Descriptor Table
这样 WinDBG 只会下载 ntdll.pdb 和 ntkrnlmp.pdb 或者 win32k.pdb 到 C:\Windows\Symbol
但其它的呢, 万一哪天要用到而 Micro$oft 又停止支援怎办, 嗯~把它一次通通下载到 C:\Windows\Symbol 好了
启动 DOS Command Line, 也就是 cmd.exe
[开始] -> [执行] -> 输入 cmd -> 按 [确定] , 会出现 DOS 的 Command Line 视窗
先跳进 WinDBG 安装目录
在 DOS 视窗输入 cd C:\Program Files\Debugging Tools for Windows (x86), 按 [Enter]
然後再输入
symchk.exe /r C:\Windows\system32 /s SRV*C:\Windows\Symbols*http://msdl.microsoft.com/download/symbols
按 [Enter] 後它就开始自动扫描和下载 C:\Windows\system32 目录下的档案的 Symbol File 到 C:\Windows\Symbols
当然你也可以扫描和下载其他目录下系统档案的 Symbol Files
例如扫描 .Net 的档案, 在 DOS 的Command Line 视窗输入
symchk.exe /r C:\WINDOWS\Microsoft.NET\Framework /s SRV*C:\Windows\Symbols*http://msdl.microsoft.com/download/symbols
但不建议放在同一个目录, 建议改放到 C:\Windows\NetSymbols
指令就变成
symchk.exe /r C:\WINDOWS\Microsoft.NET\Framework /s SRV*C:\Windows\NetSymbols*http://msdl.microsoft.com/download/symbols

WinDBG使用方法入门

首先在本页下载该软件并且安装
安装成功后,可以我开始菜单,程序中找到并启动Windbg。

启动后主界面如图。

我们可以选择文件(File)菜单》附加到一个进程。

在打开的列表中选择你要调试的进程。

有的进程可能权限比较高,无法调试。

我们使用管理员身份运行Windbg。

再选择进程,附加进程。

还是报错,这说明此程序有自我保护机制,无法进行调试。

如果程序没有自我保护,附加后会显示如图所示。

大家都喜欢

  • 电脑软件
  • 手机软件
更多>

用户评论

(您的评论需要经过审核才能显示)0人参与,0条评论
140

最新评论

还没有评论,快来抢沙发吧!

请简要描述您遇到的错误,我们将尽快予以修订

返回顶部