首先,谢谢 Robert Kuster 为我们提供了这么好的CrashMe项目. 
很多人想寻找一个CrashMe分析的教程, 我也想要, 但是似乎网络里没有, 所以我就决定用业余时间写一个小系列来共享我在故障排除以及debug上面的经验和所知,希望这个系列教程可以帮助你更好的研究项目、软件故障排除领域。 
关于怎么抓dump的教程文章很多,所以我在这里也就不多提那方面的东西了,如果你需要抓dump方面的教程,可以参考下这篇文章

系统: Windows 7 x64 
我们开始吧! 
1. 双击打开执行CrashMe.exe, 然后点击按钮"BreakPoint", 我们将会看到这样的画面

在把注意力放到dump分析上之前,我们可以像这样收集故障排除工作所需的信息资源。

现在我们开始抓dump来分析问题的根本原因。

adplus -crash -o G:\FreeZone\MSDN\Debug\CrashMe\release -sc CrashMe.exe 
[你也可以直接用WinDbg载入并执行此程序,然后直接抓dump, 或者当进程崩溃时也可以使用x86的任务管理器去转储内存信息。] 
请不要着急打开WinDbg, 注意看adplus的输出,它已经自动分析出了一些有用的信息: 
ADPlus_log_23b4_2012-06-19_21-11-37-882.log

我们可以发现这个调用栈告诉我们了根本问题时出在CrashMe!CCrashMeDlg::OnBnClicked_ExecuteBreakPoint方法调用了KERNELBASE!DebugBreak API才使用进程崩掉。

现在我们来启动WinDbg(x86)加载分析dmp: 
我们需要将我们的私有调试符号文件的路径配置到WinDbg里,或者配置到系统的环境变量中。

有时,你会发现类似于调试目标没有连接上的信息在WinDbg底部,不用担心它,它那是正在加载你的dump文件内容,等一会就好了。

我们可以看到这里给出了与adplus log同样的分析结果。 
接下来我们尝试下!analyze -v命令: 
如果你发现CrashMe.exe的方法名不能显示在WinDbg下,尝试下重新载入符号文件命令: ld * or .reload /f

它给出了同样于adplus log的调用栈描述信息。 
当我们成功配置好符号文件时,它还可以告诉我们问题出在哪一行源代码上面。然后我们就可以打开源代码文件在WinDbg提示的位置进行检查并修改。 
现在看来第一次“crash”不需要太多的研究了,问题的原因已经很明显出来了。

在博主的英文博客里此系列教程以告一段落了,总共写了16篇,过后几天博主会陆续将教程内容用中文重述在此中文博客中供没有VPN连接国外网站的朋友们学习研究。

如果你有VPN的话,可以直接访问博主的英文博客,因为有很多文章用英文写完之后没时间就没翻译到此中文博客中。

http://mikedoszhang.blogspot.com/

看雪帖子连接: http://bbs.pediy.com/showthread.php?p=1089206#post1089206

英文博客: http://mikedoszhang.blogspot.com/2012/06/crashme-analysis-tutorial-1-breakpoint.html

CrashMe分析教程1 - BreakPoint的更多相关文章

  1. .Net程序员自学dump分析教程

    文章:.Net程序员自学dump分析教程 可以分析内存状态.

  2. WinDbg 蓝屏dump分析教程

    一.WinDbg是什么?它能做什么? WinDbg是在windows平台下,强大的用户态和内核态调试工具.它能够通过dmp文件轻松的定位到问题根源,可用于分析蓝屏.程序崩溃(IE崩溃)原因,是我们日常 ...

  3. 电脑蓝屏分析教程,附工具WinDbg(x86 x64)6.12.0002.633下载

    我们常常在使用电脑中,有时会碰到电脑蓝屏,我们经常束手无策,不知道为什么会蓝屏?有些蓝屏后自动重启能正常进入系统,那么我们就可以借助工具进行分析.而有些可能需要进入到安全模式或者pe系统才会正常,那么 ...

  4. Eclipse安装Mat工具分析教程

    一.关于Mat MAT是Memory Analyzer的简称,它是一款功能强大的Java堆内存分析器.可以用于查找内存泄露以及查看内存消耗情况.MAT是基于Eclipse开发的,是一款免费的性能分析工 ...

  5. 使用LSV进行通视分析教程

    在LSV"分析"菜单栏中点击"通视分析" 在地面或者建筑物表面选择一点,然后鼠标移动到另一个位置点击结束,即可判断出两点间是否有障碍物,是否可见.通视分析结果显 ...

  6. ArcGIS学习推荐基础教程摘录

    ###########-------------------摘录一--------------------------########### ***************************** ...

  7. 逆向分析-IDA动态调试WanaCrypt0r的wcry.exe程序

    0x00 前言 2017年5月12日全球爆发大规模蠕虫勒索软件WanaCrypt0r感染事件,各大厂商对该软件做了深入分析,但针对初学者的分析教程还比较少,复现过程需要解决的问题有很多,而且没有文章具 ...

  8. [摘]Android逆向分析常用网站

    androidterm:   Android Terminal Emulator   http://code.google.com/p/androidterm/   droidbox:   Andro ...

  9. Linux ELF格式分析

    http://www.cnblogs.com/hzl6255/p/3312262.html ELF, Executable and Linking Format, 是一种用于可执行文件.目标文件.共享 ...

随机推荐

  1. ASP.NET Web Api构建基于REST风格的服务实战系列教程

    使用ASP.NET Web Api构建基于REST风格的服务实战系列教程[十]——使用CacheCow和ETag缓存资源 系列导航地址http://www.cnblogs.com/fzrain/p/3 ...

  2. Printk 标志优先级别

    #define KERN_EMERG                  "<0>"       /* 致命级:紧急事件消息,系统崩溃之前提示,表示系统不可用   */# ...

  3. 企业架构研究总结(41)——企业架构与建模之ArchiMate的由来和详述(上)

    终于完成了关于企业架构框架理论的总结,谢谢各位看官的支持,能挺过之前过于理论化的叙述而坚持到现在着实不易,笔者也自愧没有实践经验可以分享,希望日后有兴趣的看官能够不吝赐教.在本系列后面的也是最后一个大 ...

  4. C#:.net/方法/字符串/数组

    C#:.net/方法/字符串/数组,那点事 首先还是先说下(几个概念的东西)c#下的.net平台的构造快及其功能作用和程序集: .net: .net平台是由:a:运行库+b:全面基础类库(这个是从程序 ...

  5. golang环境搭建

    golang环境搭建 好久没写博客了,最近加班好厉害,加到自己都觉得不太适合这个行业了,每天头都是沉甸甸的,可惜今年注定不是收获的季节. 最近忙里偷闲在学习nodejs,赶巧看到golang的文章,一 ...

  6. C#奇葩关键字

    C#奇葩关键字——忐忑 那就认识认识吧,可是又太多,所以也只能是想到哪里是哪里,我们这就让思绪自由飞翔一会吧! 1.@ 这个东东看似和邮件有关啊,但是在C#的世界里,可跟邮件没有一毛钱关系,它是str ...

  7. JavaScript function函数种类介绍

    JavaScript function函数种类介绍 本篇主要介绍普通函数.匿名函数.闭包函数 1.普通函数介绍 1.1 示例 ? 1 2 3 function ShowName(name) {     ...

  8. HighCharts 图表高度动态调整

    HighCharts 图表高度动态调整 前言 在使用HighCharts控件过程中,发现图表可以自适应div的高度,无法根据图表x.y轴的数量动态调整div高度,否则图标挤在一起,看起来非常不美观,也 ...

  9. ASP.NET MVC3开发-数据库篇之CodeFisrt开发(一)

    本文讲述了在ASP.NET MVC3开发中M层使用Code Fisrt如何进行开发,由于作者对ASP.NET MVC3的学习不是很深,所以写的都是些基本的内容(写的如有不正确的地方请评论指正),适合初 ...

  10. gcc编译器优化给我们带来的麻烦???

    gcc编译器优化给我们带来的麻烦??? 今天看到一个很有趣的程序,如下: ? 1 2 3 4 5 6 7 8 9 int main() {     const int a = 1;     int * ...