windbg学习小结

转载 2013年12月03日 09:58:10

http://blog.csdn.net/ansencumt/article/details/7951098

 

        windbg学习小结       

        分类:            C#调试1112人阅读评论(3)收藏举报

一、命令

1、  加载调试器

命令:

.loadby sos mscorwks          .Net 3.5版本及以下

.loadby sos clr                        .Net 4.0

           .loadc:\windows\microsoft.net\framework\v2.0.50727\sos.dll

         说明:

如果服务器的.Net版本与本机不匹配需要服务器版本的mscordacwks.dll文件,如下:

.sympath=

2、  基本操作指令

!help                                sos指令帮助

!threads                         显示所有线程

!threadpool(!tp)           显示程序池信息

~54s                                       查看54号线程

kb                                    显示当前线程的callstack

~*e !clrstack               看所有线程的堆栈信息

!dumpheap                    显示托管堆的信息

!clrstack                         显示调用栈

!dumpstackobjects      打印当前thread的stack中保存的所有托管的object

!dumpclass                    打印出指定类型信息址上的类型定义

!eeheap                          列举出当前进程中managedheap的统计信息

!dumpobj(!do)               显示一个对象的内容

!dumparray                   显示数组

!syncblk                          显示同步块

!runaway                       显示线程cpu时间

!gcroot                                     跟踪对象内存引用

!gchandles                     打印出当前所有的GCHandle统计信息

!objsize                           打印出指定object

!pe                                   打印异常

vertarget                       查看系统运行时间

3、内存泄露常用指令

         !dumpheap–stat     检查当前所有托管类型的统计信息

!dumpheap –mt      查看函数表地址中的各个对象信息

!do                               查看某个对象的具体信息

!da                               查看数组信息

!gcroot                       查看哪个root了某个对象

使用例子:

!dumpheap –mt 79124418  79124418是指某个函数表的地址。

!do 0aca1000                              查看0aca1000地址中的对象

!gcroot 0aca1000                       查看谁root 了0aca1000对象

4、线程Hang住常用指令

         !threads                     查看托管经程的统计信息

         !tp(threadpool)        查看一共设有多少个线程在运行

         !runawayf                 查看各个线程的CPU使用情况   

~*e!clrstack              查看各个线程都在做什么

!synblk                        查看AwareLock的Lock方法

        

         不常用指令:

         !ip2md                        找到对应的module信息,后面参数为Callback中的EIP地址

         lmvm                           查看DLL/EXE文件信息,参数为某个dll文件名称

         !savemodule             保存DLL到本场

        

         使用例子:

         !ip2md0x09d30bao

         lmvmcommonobjects

         !savemodule081f0000 d:\xiongli\commandobject.dll

5、内存指令:

         S                                   可以搜索内存

r                                    显示寄存器的信息

         d                                   显示内存地址上的值

         e                                   命令修改内存地址上的值

         !address                     命令显示某一地址上的页信息

         使用例子:

         1)使用d命令显示esp寄存器指向的内存,默认为byte

                  d  esp

         2)用dd命令直接指定054efc14地址,第二个d表示用DWORD格式

                   dd 054efc14

         3)用ed命令把054efc14地址上的值修改成11112222

                   ed 054efc14  11112222

         4)再次用dd命令显示054efc14地址上的值,后面的L4参数表示长度为4个DWORD

                   dd 054efc14  L4

         5)在内存中搜索sina.com

                   s –u  0012ff40 L?8000000 “sina.com”

6、其他常用指令:

         lmf                               列出当前进程中加载的所有DLL文件和对应的路径

         ~                                   显示线程信息和不同线程之间切换的值

         k                                   显示当前线程的callstack

         ~*k                               结合~和k命令,来显示所有线程的callstack

二、脚本

1、  生成DUMP包脚本

Set objShell =CreateObject("Wscript.Shell")

Dim InputPid

InputPid = InputBox("请输入Pid")

objCommand1 = """D:\ProgramFiles\Debugging Tools for Windows (x86)\adplus.vbs""" &" -hang -o d:\dump -quiet -p " & InputPid

objShell.Run(objCommand1)

保存成.vbs的文件

点开运行后,输入对应的进程PID,即可抓下当前进程的包。



附录:

命令 说明 示例
.loadby sos mscorwks .Net 3.5版本及以下
.loadby sos clr .Net 4.0
.load c:\windows\microsoft.net\framework\v2.0.50727\sos.dll 加载SOS文件
.sympath= 如果服务器的.Net版本与本机不匹配需要服务器版本的mscordacwks.dll文件
!help sos指令帮助
vertarget 查看系统运行时间
!threads 显示所有线程
!threadpool(!tp) 显示程序池信息
~54s  查看54号线程
kb 显示当前线程的callstack
~*e !clrstack  看所有线程的堆栈信息
!syncblk 显示同步块
!runaway 显示线程cpu时间
!pe 打印异常
!dumpheap 显示托管堆的信息
!dumpheap –stat 检查当前所有托管类型的统计信息
!dumpheap –mt 查看函数表地址中的各个对象信息 !dumpheap –mt 79124418   79124418是指某个函数表的地址。
!clrstack 显示调用栈
!dumpstackobjects 打印当前thread的stack中保存的所有托管的object
!dumpclass 打印出指定类型信息址上的类型定义
!eeheap 列举出当前进程中managed heap的统计信息
!dumpobj(!do) 显示一个对象的内容 !do 0aca1000    查看0aca1000地址中的对象
!dumparray(!da) 显示数组
!gcroot 跟踪对象内存引用 !gcroot 0aca1000   查看谁root 了0aca1000对象
!gchandles 打印出当前所有的GC Handle统计信息
!objsize 打印出指定object
!ip2md 找到对应的module信息,后面参数为Callback中的EIP地址 !ip2md 0x09d30bao
lmvm 查看DLL/EXE文件信息,参数为某个dll文件名称 lmvm commonobjects
!savemodule 保存DLL到本场 !savemodule 081f0000 d:\xiongli\commandobject.dll
S 可以搜索内存 在内存中搜索sina.com: s  –u  0012ff40 L?8000000 “sina.com”
r 显示寄存器的信息
d 显示内存地址上的值 使用d命令显示esp寄存器指向的内存,默认为byte: d  esp
用dd命令直接指定054efc14地址,第二个d表示用DWORD格式: dd  054efc14
e 命令修改内存地址上的值 用ed命令把054efc14地址上的值修改成11112222: ed  054efc14  11112222
!address 命令显示某一地址上的页信息
lmf 列出当前进程中加载的所有DLL文件和对应的路径
~ 显示线程信息和不同线程之间切换的值
k 显示当前线程的call stack
~*k 结合~和k命令,来显示所有线程的callstack

 

相关文章推荐

Java学习IO流小结--字节流

  • 2015年07月11日 14:59
  • 218KB
  • 下载

AE学习小结。

  • 2013年01月30日 10:30
  • 4.88MB
  • 下载

Windbg dump分析 学习总结

Windbg核心调试之dump分析 http://www.pediy.com/kssd/pediy08/pediy8-428.htm 标 题: Windbg核心调试之dump分析 作 者:Lvg...

myBatis学习小结.chm

  • 2012年12月25日 15:53
  • 255KB
  • 下载

Java学习IO流小结--字符流

  • 2015年07月11日 15:01
  • 119KB
  • 下载

WinDbg学习笔记一 - 安装,入门

这两年一直断断续续的在学些调试相关的东西,WinDbg是必备的强大工具。虽然现在还没到熟练掌握的程度,但是中间还是碰到了很多坑,在此记录下,以免忘记。同时希望能对看到的人有所帮助。 安装: 网上可...
  • imJaron
  • imJaron
  • 2017年10月31日 14:50
  • 32

hibernate学习小结 @爱编程

  • 2013年07月21日 19:58
  • 45KB
  • 下载

oracle环境变量学习小结.

  • 2012年06月07日 16:07
  • 26KB
  • 下载

windbg 学习指南<三>

WinDbug调试Debug和Release编译下的程序,要进行相关属性设置,否则默认Release下的程序是不能定位到 WinDbgTest!TTSS::XXXXX里面去的 VS2008的Re...

ILOG优化软件学习小结1

  • 2011年03月10日 16:04
  • 73KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:windbg学习小结
举报原因:
原因补充:

(最多只允许输入30个字)