原调试debugwindbg崩溃crash 前言 最近程序会不定期崩溃,很是头疼!今晚终于忍无可忍,下决心要干掉它!从之前的几个相关的dump可以猜到是有接口未释放导致的问题,但没有确认到底是哪个接口.本篇总结记录了找到这个接口的过程. {% note info %} 这是几年前在项目中遇到的一个问题.我对之前的笔记进行了整理重新发布于此. {% endnote %} 初识问题 用windbg打开dump文件,显示如下: startup 从图中可以很明显的看出来是访问违例(因为红框标识的地址5b…
最近项目里遇到一个崩溃,不定期出现,很是头疼!今晚终于忍无可忍,下决心要干掉它!(于是用凉水洗了把脸,开始分析dump)希望凌晨的这篇总结对有相似经历的朋友有所启发!(看之前相关的几个dump可以猜到是有接口未释放的问题,但没有确认到底是哪个接口,本篇总结的主要目的是记录找到这个接口的过程)   用windbg打开dump文件,显示如下  很明显是访问违例!从红框里的内容可知要取地址5bbc97f8的值,然后call之.但是5bbc97f8已经无效了!用!address 5bbc97f8来看下该…
原调试debugwindbgcrash崩溃COM 前言 这是几年前在项目中遇到的一个崩溃问题,崩溃在了ComFriendlyWaitMtaThreadProc()里,没有源码.耗费了我很大精力,最终通过反汇编并结合原代码才最终搞清楚了事情的来龙去脉.本文的分析还是基于真实项目进行的,中间略去了很多反汇编的分析工作.文末有我整理的测试代码,大家可以实际体验一把TerminateThread()的杀伤力. 背景介绍 大概情况是这样的:程序启动的时候,会通过LoadLibrary()加载插件模块.其中…
原调试debugwindbg死锁deadlock 前言 最近我们的程序在退出时会卡住,调查发现是在卸载dll时死锁了.大概流程是这样的:我们的dll在加载的时候会创建一个工作线程,在卸载的时候,会设置退出标志并等待之前开启的工作线程结束.为了研究这个经典的死锁问题,写了一个模拟程序,用到的dump文件及示例代码参考附件. {% note info %} 这也是几年前在项目中遇到的一个问题,我对之前的笔记进行了整理重新发布于此. {% endnote %} 关键代码 主程序 WaitDllUnlo…
原调试debugwindbg死锁deadlock 前言 项目里的一个升级程序偶尔会死锁,查看dump后发现是死在了ShellExecuteExW里.经验少,不知道为什么,于是在高端调试论坛里发帖求助,链接如下http://advdbg.org/forums/6520/ShowPost.aspx 根据张银奎老师的描述可知,应该是拥有关键段的线程意外结束了.仔细检查项目中的代码,发现程序中有使用TerminateThread()来强制杀线程的代码.很可疑,于是写了一个测试程序,还原了这个问题. {%…
原调试debugwindbg死锁deadlock 前言 这是几年前在项目中遇到的一个死锁问题,在博客园发布过.我对之前的笔记进行了整理重新发布于此. 本文假设小伙伴们知道一些基本概念,比如什么是.dump文件(转储文件,进程在某一时刻的快照),什么是windbg(windows下的调试利器),windbg的基本用法,调用栈,调用约定,等等. 背景介绍 我们的程序会把dll注入到其它进程,然后后调用SetWinEventHook安装进程内钩子.然后专门开启一个线程来分发监听到的事件信息,并在该线程…
Windbg是.NET高级调试领域中不可或缺的一个工具和利器,也是日常我们分析解决问题的必备.准备近期写2篇精华文章,集中给大家分享一下如果通过Windbg进行.NET高级调试. 今天我们来一篇入门的文章.首先,Windbg是什么? Windows Debugger,简称WinDbg,.NET 最强分析调试利器.它可以用来: 调试内核模式和用户模式代码 分析Crash dump 分析代码执行时 CPU 寄存器信息 我们可以通过WinDbg调试以下具体问题: 线程阻塞 内存泄露 分析查询运行时线程…
作者:张佩][原文:http://www.yiiyee.cn/Blog] 1. 概述 用户成功安装微软Windows调试工具集后,能够在安装目录下发现四个调试器程序,分别是:cdb.exe.ntsd.exe.kd.exe和Windbg.exe.其中cdb.exe和ntsd.exe只能调试用户程序,Kd.exe主要用于内核调试,有时候也用于用户态调试,上述三者的一个共同特点是,都只有控制台界面,以命令行形式工作. Windbg.exe在用户态.内核态下都能够发挥调试功能,尤其重要的是,它不再是命令…
转载注明>> [作者:张佩][镜像:http://www.yiiyee.cn/Blog] 1. 概述 用户成功安装微软Windows调试工具集后,能够在安装目录下发现四个调试器程序,分别是:cdb.exe.ntsd.exe.kd.exe和Windbg.exe.其中cdb.exe和ntsd.exe只能调试用户程序,Kd.exe主要用于内核调试,有时候也用于用户态调试,上述三者的一个共同特点是,都只有控制台界面,以命令行形式工作. Windbg.exe在用户态.内核态下都能够发挥调试功能,尤其重要…
1. 解决线上.NET应用程序的如下问题: 崩溃 CPU高 程序异常 程序Hang死 2. 安装WinDbg: http://msdn.microsoft.com/en-us/windows/hardware/gg463009.aspx 3. 配置WinDbg: 运行WinDbg->菜单->File->Symbol File Path->按照下面的方法设置_NT_SYMBOL_PATH变量:在弹出的框中输入“C:\MyCodesSymbols; SRV*C:\MyLocalSymb…