Windbg程序调试是.Net高级开发需要掌握的必备技能,分析内存泄露.分析高CPU.分析线程阻塞.分析内存对象.分析线程堆栈.Live Dedugging.这个领域可以说一个技能+场景化应用的结合,如果单学Windbg命令,不理解实际Troubleshooting中的作用,是没有意义的.所以,准备搞个系列文章,3~5篇,分享给大家: 工欲善其事必先利其器,我们先从常用的命令和示例说起. 1. 先准备一个Dump文件,建议使用64位应用程序.例如:64位IIS应用的w3wp进程,64位exe进程…
最近整理了一下Windbg程序调试系列的文章,做个了索引贴,方便大家查询.搜索: Windbg程序调试系列1-常用命令说明&示例 Windbg程序调试系列1-Mex扩展使用总结 Windbg程序调试系列2-内存泄露问题 Windbg程序调试系列3-线程阻塞问题 Windbg程序调试系列4-Live Debugging Windbg程序调试系列5-高CPU问题分析 .Net 内存对象分析 周国庆 2019/8/6…
上篇博客中给大家分享了使用Windbg进行Live Debugging: Windbg程序调试系列4-Live Debugging 本篇中我们继续,跟大家分享常见的应用程序高CPU使用率问题分析. 先说Windows下CPU使用率这个概念: CPU使用率:在任务管理器的刷新周期内CPU忙的时间与整个刷新周期的比值.默认的刷新周期是1s. 即1s内,反映出系统的CPU繁忙程度 我们打开Windows的任务管理器,可以看到CPU的使用率: 当然,这个CPU使用率是整个所有核心CPU的使用率.比如我本…
上篇博文中给大家分享了使用Windbg分析线程阻塞问题: Windbg程序调试系列3-线程阻塞问题 本篇中我们继续,跟大家分享附加进程实时调试-Live Debugging. 先说一下使用Windbg附加进程实时调试的应用场景和注意事项: 应用场景: 集成测试环境,影响异常后,分析异常和线程上下文的执行堆栈.参数情况: 生产环境:短时间内调试程序异常,查看异常上下文和参数,但是调试时间不能太久. 注意事项:附加进程调试会阻塞请求,调试后新的请求被阻塞住,前端调用受影响,因此要谨慎.权衡利弊,开发…
上一篇博文给大家分享了使用Windbg分析内存泄露问题: Windbg程序调试系列2-内存泄露问题 本篇我们继续跟大家分享,如何分析解决线程阻塞问题. 从根本上讲,线程阻塞属于程序Hang的一种,其表现主要有: 1. 随着请求的增加,线程数一直增加,可能会把线程池打爆 2. 低CPU使用率(被阻塞后的CPU使用率降低) 3. 请求没有返回,客户端一直在等待,直至Timeout. 那么,从线程状态上看,什么是阻塞? 一个线程经历的5个状态,创建,就绪,运行,阻塞,终止.各个状态的转换条件如下图:…
运用Windbg进行内核调试, 熟练的运用命令行是必不可少的技能. 但是面对众多繁琐的命令, 实在是不可能全部的了解和掌握. 而了解Kernel正是需要这些命令的指引, 不断深入理解其基本的内容. 下面, 将介绍最常用的一些指令, 使初学Kernel调试的朋友们能有一个大致的了解. 至于如何熟练的运用它们, 还需要实际的操作过程中进行反复的琢磨. Windbg能够方便的进行远程调试和本地进程调试(只限于User模式), 远程调试又分User mode和Kernel mode两种. 个人认为用Wi…
最近一直在频繁使用Windbg做线上Dump调试,与微软做Case交流的时候,发现微软CSS团队,用了一个非常效率的Windbg 插件,Mex: 使用介绍: https://blogs.msdn.microsoft.com/luisdem/2016/07/19/mex-debugging-extension-for-windbg-2/ 下载地址: https://www.microsoft.com/en-us/download/details.aspx?id=53304 下载之后,解压缩,有两个…
上篇文章给大家解释了Windbg的基本命令和说明,这一篇给大家介绍内存泄露场景的问题分析. 文章大纲: 描述问题背景和现象 确定问题是否是内存泄露 梳理问题分析思路 动手分析解决 总结 1. 先说问题背景:生产环境IIS站点,运行一段时间后,w3wp进程内存会涨到2G,同时内存不释放. 2. 问题确认 打开性能计数器,我们重点看一段时间内,IIS站点w3wp进程相关的性能计数器的变化: 性能计数器中:有三个非常重要: .NET CLR Memory/Gen 2 heap size.NET CLR…
Windows程序调试系列: 使用VC++生成调试信息 ZhangTao,zhangtao.it@gmail.com, 译自 “Generating debug information with Visual C++”,Oleg Starodumov 出处: http://www.cnblogs.com/itrust/archive/2006/08/17/479603.aspx 引子 当我们使用调试器来调试程序时,我们希望能够单步调试到源代码中,在代码中设置断点,观察变量的值(包括用户自定义的复…
Hexo 框架可以帮助我们快速创建一个属于自己的博客网站,熟悉 Hexo 框架提供的命令有利于我们管理博客 1.hexo init hexo init 命令用于初始化本地文件夹为网站的根目录 $ hexo init [folder] folder 可选参数,用以指定初始化目录的路径,若无指定则默认为当前目录 2.hexo new hexo new 命令用于新建文章,一般可以简写为 hexo n $ hexo new [layout] <title> layout 可选参数,用以指定文章类型,若…