windbg 简单使用

Posted HarryChinese

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了windbg 简单使用相关的知识,希望对你有一定的参考价值。

==========================

下载 windbg

==========================

搜索 windbg 官网, http://windbg.org/


windbg 工具包含在  Windows Software Development Kit (SDK) 中, 所以要下 windows SDK.  我的操作系统系统 win7, 所以下的是 win7版本 SDK,  下载地址为 https://developer.microsoft.com/en-us/windows/downloads/sdk-archive/

下载下来的是一个installer, 在installer中选 Debugging Tools for Windows"


==========================

下载 windows的 symbols 配置

==========================

一般的 windows 的dll/exe程序文件都做过优化, 文件内部并不包含symbol信息(函数名/变量名), 所以分析dump文件, 一定需要先下载这些程序的 symbol 文件, symbol 文件一般的扩展名是 *.pdb.


1. [有效方法] 下载 symbol 方法:

微软已经不提供offline symbols 下载包, 只能使用 symchk.exe 下载.

将symbols文件下载到本地命令格式为:

"C:\\Program Files\\Debugging Tools for Windows (x64)\\symchk.exe" [filename] /s SRV*[symbol_folder]*http://msdl.microsoft.com/download/symbols


示例1: 将指定的calc.exe的pdb文件下载到本地 c:\\symbols

"C:\\Program Files\\Debugging Tools for Windows (x64)\\symchk.exe" "c:\\windows\\system32\\calc.exe" /s SRV*c:\\symbols\\*http://msdl.microsoft.com/download/symbols


示例2: 扫描c:\\windows 下所有的exe/dll文件, 并把它们对应的pdb文件下载到本地 c:\\symbols

"C:\\Program Files\\Debugging Tools for Windows (x64)\\symchk.exe" /r c:\\windows /s SRV*c:\\symbols\\*http://msdl.microsoft.com/download/symbols

其中 /r 代表循环, -r c:\\windows 即循环windows系统目录下的exe/dll文件, 所以上面的命令会花费很长时间才能完成下载.

windbg



==========================

windbg 中使用已经下载的symbols

==========================

查看当前的symbol search path, 只需要直接运行 .sympath 即可.

.sympath


要本地程序的 C:\\symbols 路径, 使用.sympath+ 命令,

.sympath+ C:\\symbols

.sympath+ cache*


直接设置sym path 命令,

.sympath C:\\symbols1;C:\\symbols2


==========================

windbg 中直接使用微软服务器上的symbols

==========================

使用下面命令:

.sympath srv*c:\\symbols*https://msdl.microsoft.com/download/symbols


前缀srv代表是 symbol server

第一个*后是download server下载下来的local directory,

第二个*后是微软 symbol server path, 包含 shell32.dll, gdi32.dll, advapi32.dll, kernel32.dll, ntdll.dll 等文件的symbols.


==========================

准备自研工具的symbols

==========================

推荐将 windows 官方的symbols单独放到一个目录, 比如 c:\\symbols

将自研工具的pdb文件 放到另一个目录, 比如c:\\privateSymbols 

.sympath+ C:\\privateSymbols


==========================

加载 symbols 文件

==========================

设置 symbol search path之后, 需要加载相关 modules 的 symbol 文件, windbg 命令为:

.reload /f

该命令也能报错当前缺少哪些 symbol 库. 如果使用了微软远端的symbols server, reload 命令需要很久时间, 见下面的截图.


如果 .reload /f 命令报错, 可以使用下面命令进入 verbose 模式, 可以看出更详尽的信息:

!sym noisy

然后再运行 .reload /f 命令

 windbg


==========================

创建需要debug程序的 dump 文件

==========================

可以用任务管理器将该程序的进程导出一个转储dump文件,  有时会报 "拒绝访问"的错误, 原因往往是资源管理和你程序64bit/32bit版本不一致, 但有时候也不太管用.


推荐使用 windbg , 方法是: windbg 菜单 file/attach to a process, 选中目标程序, 然后运行下面命令:

.dump /ma /u c:\\calc.dmp

.dump命令参数比较多,常用的组合就是/ma,​​/m​​​表示生成minidump,​​/a​​​表示dmp包含所有信息,​​/u​​参数就是上面说的附加时间和PID信息到文件名。


================================

windbg 实例学习

================================

记一次使用windbg排查内存泄漏的过程


调试内存泄漏问题的一些经验

http://fresky.github.io/2015/06/21/how-to-attack-the-memory-leak-issue/


https://www.codeproject.com/articles/31382/memory-leak-detection-using-windbg


https://stackoverflow.com/questions/674247/vb6-memory-leak




以上是关于windbg 简单使用的主要内容,如果未能解决你的问题,请参考以下文章

WinDbg链接

WinDbg链接

如何设断点????-----使用WinDbg调试SQL Server查询

windbg怎么查看

WinDBG + VMWare 双机调试

使用windwow windbg 吃透64位分页内存管理