• pecommon6.dll > WinDbg 调试入门
  • WinDbg 调试入门

    免费下载 下载该文档 文档格式:PDF   更新时间:2014-08-06   下载次数:0   点击次数:1
    WinDbg调试入门 GTW 陈晓锋 目录 ?Windbg介绍 ?Windbg安装配置 ?转储(dump)文件 ?Windbg常用命令 ?高cpu实例分析 ?内存泄漏实例分析 ?其他调试工具 Windbg介绍 什么是Windbg? ? Windows上的调试工具 ? 默认的调试命令可以调试非托管程序 ? 通过扩展命令组件如SSO等,可以方便地 调试.NET托管程序 Windbg调试方式 ? 离线调试 – 创建程序的内存dump文件 – 使用windbg本机调试查看 ? 在线调试 – 附加到进程 – 设断点,查看实时运行信息... Windbg适用场景 ? 内存泄漏 ? 性能问题 – 高CPU负载 – 运行慢,如死锁 ? 程序崩溃 – 异常 .NET扩展组件 ? 有两个扩展组件:SSO.dll和PssCor2.dll ? PssCor2比SSO.dll增加了几个扩展命令 ? PssCor2可用于.Net3.5以下的程序 ? PssCor4用于.Net4.0的程序 Windbg安装配置 Windbg安装 ? 下载windows sdk安装Debugging Tools for Windows ? 默认安装到C:\Program Files中,建议拷贝出 来,和symbols、扩展组件一起放到一个统 一的目录下,如d:\debug Windbg配置 ? 设定symbols路径 srv*d:\debug\symbols*http://msdl.microsoft.com/download/symbols 转储(dump)文件 创建dump文件方式 ? Vista以上操作系统可以使用任务管理器直 接创建dump文件 创建dump文件方式 ? ADPlus – 在windbg的安装目录下 – 命令行下运行 – 支持hand和crash模式 创建dump文件方式 ? Process Explore – http://technet.microsoft.com/en- us/sysinternals/bb896653.aspx Windbg常用命令 程序相关命令 ? 加载扩展组件 ? 显示帮助 ? 查看程序已加载的dll模块 ? 查看程序运行时间信息 >> .load d:\debug\psscor2\amd64\psscor2.dll >> !help >> lm >> .time 线程相关命令 ? 查看线程运行时间 ? 查看线程池 ? 查看托管线程详细信息 ? 切换到指定线程 >> !threadpool >> !threads >> ~[thread id]s >> !runaway 线程相关命令 ? 查看当前线程托管堆栈信息 ? 查看所有线程的托管堆栈信息 ? 查看当前线程原始堆栈信息 ? 查看所有线程的原始堆栈信息 ? 查看当前线程堆栈引用的对象 >> !clrstack >> kb 2000 >> !dso >> ~*e!clrstack >> ~* kb 2000 内存相关命令 ? 查看托管堆使用情况 ? 查看托管堆对象信息 ? 查看指定地址引用对象信息 ? 查看指定地址值类型对象信息 ? 查看数组对象信息 >> !dumpheap >> !dumpobject (!do) >> !dumparray (!da) -detail >> !eeheap -gc >> !dumpvc 内存相关命令 ? 查看托管堆使用情况 ? 查看托管堆对象信息 ? 查看指定地址对象信息 ? 查看数组对象信息 ? 计算对象大小 ? 查看对象引用关系 >> !objsize >> !dumpheap >> !dumpobject (!do) >> !dumparray (!da) -detail >> !gcroot >> !eeheap -gc 异常相关命令 ? 查看所有异常信息 ? 打印详细异常信息 >> !dae >> !pe 进阶命令 ? 一次显示多个对象的详细信息 ? 可配合dumpheap使用,需加一个"-short"参数,表示只 输出对象地址信息 ? 一次输出所有线程的堆栈信息 ? 查找输出字符串 >> .foreach(myVariable {!dumpheap -type System.ArgumentNullException - short}){!pe myVariable;.echo *******} >> ~*e!clrstack >> .shell -ci "!da -details 01edc72c" find "key" 高cpu实例分析 分析流程 ? 最重要是查出当前线程正在执行的内容 开始 查看进程运行 时长 进入某一线 程 查看线程堆栈 和对象信息 分析 代码 ~[thread id]s !threads !clrstack 进入其他线程 查看所有线程 .time 查看各线程运 行时长 !runaway 1、运行demo测试HightCpuTest, 利用processxp创建转储(dump)文件2、输入命令"!threads"查看所有 线程信息,第一列就是线程的id值3、执行"~7s"可以进入id为7的线 程4、执行"!clrstack"查看当前线程 堆栈信息,可能会提示当前线程丌 是托管线程,显示丌了堆栈信息 5、继续进入其他线程或执行 "~*e!clrstack" 6、会看到有几条线程在执行正则表 达式的"CompileRegexRunner()" 操作,这时可能大概估出不代码中 的正则表达式匹配有关 7、查看代码找出真正问题所在 内存泄漏实例分析 分析流程 ? 打开任务管理器/性能监视器, 判断内存泄 漏类型——原生/托管 ? 隔10到20秒分别创建dump文件,以便 windbg中分析对比 ? 使用windbg查看托管堆中什么对象增长比 较快,或占用内存最多 ? 查看对象信息并分析代码 分析流程 开始 比较dump对象 增长情况 查看可疑对 象详细信息 查看对象引用 关系 分析 代码 !do xxxx !dumpheap -stat !gcroot xxxx 1、运行demo测试LeakTest, 利用processxp创建两个相隔 15s左右的转储(dump)文件 2、运行两个windbg程序,分 别打开两个dump文件 3、两边都执行"!dumpheap –stat",查看托管堆使用情况, 可以看到15秒左右对象增长很 快(这里显示的大小是对象结构 的总大小,没包括子引用对象 大小) 4、查看各类型的大小和数量, 可以看到System.Int32[]增加得 最快,15s内增加了200m左右! 5、执行"!dumpheap –mt xxxx –l 100",显示前100个 指定类型的对象信息,当信息 显示太多时,可随时按 ctrl+break中断输出 6、随机采样一个对象地址,执 行命令"!do 0x1adfc1c",查 看对象详细信息,可以看到该 对象是有100个元素的int数组 7、对该对象再执行"!gcroot 0x1adfc1c",查看对象引用关 系8、从引用关系,可以看到,int 数组由LeakTest.Client对象引 用,而LeakTest.Host经委托引 用了该Client对象,而Client本 身又带有了Host对象的引用, 交成了交叉引用!! 内存引用关系 GC roots Host EventHandler Client System.Bytes[] 内存引用关系 GC roots Host EventHandler Client System.Bytes[] 其他调试工具 其他调试工具 ? DebugDiag(免费) – 另一分析dump文件工具,对分析原生程序内存泄漏很 有用 – http://www.microsoft.com/download/en/details.aspx?dis playlang=en&id=24370 ? CLR Profiler(免费) – http://www.microsoft.com/download/en/details.aspx?id= 16273 ? YourKit Profiler(商业) – http://yourkit.com/.net/profiler/index.jsp ? dotTrace (商业) – http://www.jetbrains.com/profiler/ 参考资料 ? Debugging NET Applications With WinDBG – http://www.slideshare.net/CoryFoy/debugging-net-applications-with-windbg ? I have a memory leak!!! What do i do? – http://blogs.msdn.com/b/tess/archive/2005/11/25/i-have-a-memory-leak- what-do-i-do-defining-the-where.aspx ? Common WinDbg Commands – http://windbg.info/doc/1-common-cmds.html ? I am getting OutOfMemoryExceptions.How can I troubleshoot this? – http://blogs.msdn.com/b/johan/archive/2007/01/11/i-am-getting- outofmemoryexceptions-how-can-i-troubleshoot-this.aspx ? Getting started with windbg - part I – http://blogs.msdn.com/b/johan/archive/2007/11/13/getting-started-with- windbg-part-i.aspx ? Production Debugging for .NET FrameworkApplications – http://msdn.microsoft.com/en-us/library/ee817663.aspx Any Question?
  • 下载地址 (推荐使用迅雷下载地址,速度快,支持断点续传)
  • 免费下载 PDF格式下载
  • 您可能感兴趣的
  • x3daudio16dll  xercesc26dll  x3daudio16dll下载  vba6dll  aclstl6dll  计算机丢失aclst6dll  winobj6dll  libstdc6dll  ac1st6dll  pecms6dll