分类

windbg下载 v6.12 官方最新版

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

大小:34.5MB更新日期:2026/02/05

类别:系统软件语言:简体中文

立即下载
    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