1.dump文件

2.程序对应的pdb

步骤一:安装windbg

步骤二:通过windbg打开crash dump文件

步骤三:设置pdb文件路径,即符号表路径

步骤四:运行命令!analyze -v,这是windbg提供的一个自动分析命令,正常情况下,会显示出导致崩溃的行为,其所在文件,以及其在文件中的具体行数

0:254> !analyze -v

..............(一些warnning信息)
FAULTING_IP: 
GDrvStd!memcpy+b6
007642b6 f3a5            rep movs dword ptr es:[edi],dword ptr [esi]

EXCEPTION_RECORD:  ffffffff -- (.exr 0xffffffffffffffff)
ExceptionAddress: 007642b6 (GDrvStd!memcpy+0x000000b6)
   ExceptionCode: c0000005 (Access violation)
  ExceptionFlags: 00000000
NumberParameters: 2
   Parameter[0]: 00000000
   Parameter[1]: 2b680000
Attempt to read from address 2b680000

PROCESS_NAME:  IOServer.exe

MODULE_NAME: GDrvStd

FAULTING_MODULE: 7c930000 ntdll

DEBUG_FLR_IMAGE_TIMESTAMP:  4cbbd7a5

ERROR_CODE: (NTSTATUS) 0xc0000005 - "0x%08lx"

READ_ADDRESS:  2b680000

EXCEPTION_DOESNOT_MATCH_CODE:  This indicates a hardware error.
Instruction at 007642b6 does not read/write to 2b680000

FAULTING_THREAD:  00005fe8

BUGCHECK_STR:  APPLICATION_FAULT_CODE_ADDRESS_MISMATCH_WRONG_SYMBOLS

PRIMARY_PROBLEM_CLASS:  CODE_ADDRESS_MISMATCH

DEFAULT_BUCKET_ID:  WRONG_SYMBOLS

LAST_CONTROL_TRANSFER:  from 00758cd5 to 007642b6

STACK_TEXT:  
2b67f5dc 00758cd5 4c540026 2b67f76a 0e2f122a GDrvStd!memcpy+0xb6//导致崩溃的操作
2b67fd30 0075be78 00000033 4c540020 2b67fe18 GDrvStd!DrvIE::IEReceiveEx+0xc5 [d:\install-disk\macs6.1.5_release\plant_view\ͨÐÅ\´úÂë\macsgateway\drvstd\drvie.cpp @ 633]//定位出导致崩溃的memcpy操作是在drvie.cpp文件的633行
2b67ff2c 00755d3a 00000000 0eeafcd0 0eeafcd0 GDrvStd!DrvIE::ReceiveMessage+0x128 [d:\install-disk\macs6.1.5_release\plant_view\ͨÐÅ\´úÂë\macsgateway\drvstd\drvie.cpp @ 1245]
2b67ff84 00764f23 113fe008 00000000 00000000 GDrvStd!RecvThread+0x1a [d:\install-disk\macs6.1.5_release\plant_view\ͨÐÅ\´úÂë\macsgateway\drvstd\drvie.cpp @ 38]
2b67ffb8 7c824829 0eeafcd0 00000000 00000000 GDrvStd!_beginthread+0xce
WARNING: Stack unwind information not available. Following frames may be wrong.
2b67ffec 00000000 00764ecc 0eeafcd0 00000000 kernel32+0x24829

FOLLOWUP_IP: 
GDrvStd!memcpy+b6
007642b6 f3a5            rep movs dword ptr es:[edi],dword ptr [esi]

SYMBOL_STACK_INDEX:  0

SYMBOL_NAME:  GDrvStd!memcpy+b6

FOLLOWUP_NAME:  MachineOwner

IMAGE_NAME:  GDrvStd.dll

STACK_COMMAND:  ~254s; .ecxr ; kb

BUCKET_ID:  WRONG_SYMBOLS

FAILURE_BUCKET_ID:  CODE_ADDRESS_MISMATCH_c0000005_GDrvStd.dll!base_address

Followup: MachineOwner
---------

步骤五:根据错误代码行,分析可能错误原因,解决之

windbg功能很多,命令很多,上面只是介绍了一般的崩溃简单分析步骤与方法。

注:

windbg常用命令:

!analyze -v

崩溃智能分析,可以简单定位到崩溃代码行

!for_each_frame dv /t
通常想查看调用栈上每一个函数的信息,可以用'!for_each_frame dv /t'命令(/t选项要求'dv'显示有用的类型信息)。(当然,我们必须记住,使用优化编译时,在函数的整个生存期中,局部变量有可能会被取消,重注册或被重用来保存其它的数据,因此,可能会导致'dv'命令输出错误的值)。

.ecxr

要求调试器把当前的内容切换到保存在故障转储里的异常信息。我们执行这条命令后,将能访问异常抛出时调用栈和局部变量的值。

~*kb
打印所有线程的调用栈

.cls (Clear Screen)
清屏

http://blog.csdn.net/lizheng308/article/details/6866284

dump文件定位程序崩溃代码行的更多相关文章

  1. 使用MAP文件快速定位程序崩溃代码行 (转)

    使用MAP文件快速定位程序崩溃代码行 =========================================================== 作者: lzmfeng(http://lz ...

  2. iOS定位到崩溃代码行数

    不知道大家是不是在代码调试过程中经常遇到项目崩溃的情况: 比如: 数组越界: 没有实现方法选择器: 野指针: 还有很多很多情况.......昨天学到了一种可以直接定位到崩溃代码行数的一个命令,记录一下 ...

  3. VS2008通过 map 和 cod 文件定位崩溃代码行

    VS 2005/2008使用map文件查找程序崩溃原因 一般程序崩溃可以通过debug,找到程序在那一行代码崩溃了,最近编一个多线程的程序,都不知道在那发生错误,多线程并发,又不好单行调试,终于找到一 ...

  4. linux设备驱动第四篇:从如何定位oops的代码行谈驱动调试方法

    上一篇我们大概聊了如何写一个简单的字符设备驱动,我们不是神,写代码肯定会出现问题,我们需要在编写代码的过程中不断调试.在普通的c应用程序中,我们经常使用printf来输出信息,或者使用gdb来调试程序 ...

  5. VS2005(vs2008,vs2010)使用map文件查找程序崩溃原因

    VS 2005使用map文件查找程序崩溃原因 一般程序崩溃可以通过debug,找到程序在那一行代码崩溃了,最近编一个多线程的程序,都不知道在那发生错误,多线程并发,又不好单行调试,终于找到一个比较好的 ...

  6. 通过map文件找程序崩溃的代码行

    一,配置vs 二,程序崩溃界面 // ConsoleApplication1.cpp : 此文件包含 "main" 函数.程序执行将在此处开始并结束. // #include &l ...

  7. 统计文件夹下java代码行数的小程序--主要是学习任务队列的思想

    首先感谢czbk的老师,录制的视频,让我们有这么好的学习资料.……—— 统计文件夹java文件的行数,首先想到的肯定是用递归的方法,因为文件夹下面可能包含文件夹,用递归的方法,代码容易写.(这和写简单 ...

  8. VEH帮你定位程序崩溃地址

    之前朋友有一个服务端程序,总是受到一些人的恶意漏洞攻击,没有源代码,只好反汇编修复了漏洞,并且使用WinLicense加保护授权. 漏洞总不是一次可以修复完的,恶意攻击并没有停止,然后加了WL保护程序 ...

  9. 使用python对文件夹里面所有代码行数进行统计。

    统计目录下所有的代码个数和总行数. # -*- coding: utf-8 -*- # @Author : ydf import json import os from pathlib import ...

随机推荐

  1. JTable只要一双击就进入编辑状态,禁止的方法实现

    我用JTable做了一个表格,表格内容只供查看和选择,可每次只要一双击,就进入编辑状态,可是现在我不需要当双击的时候修改表格的内容.这时候需要重载isCellEditable方法. 下面是我的实现的代 ...

  2. UpdatePanel + 弹出框

    ScriptManager.RegisterStartupScript(UpdatePanel1, this.GetType(), "", "alert('操作成功!') ...

  3. 正整数从1到N,输出按照字典序排序的前K个数

    #include <iostream> #include <cassert> using namespace std; ; char a[max_len]; void topK ...

  4. math。h中的log函数的应用

    以10为底的log函数: 形式为 double  log10(double  x) 以e为底的log函数(即 ln)double log (double x) 如何表达log 以a为底b的对数: 用换 ...

  5. 学习PS必须弄懂的专业术语

    在学习PS的过程中,我们经常会遇到一些专业术语,下面我们来对一些常用的.比较难理解的术语进行简单讲解. 像素:像素是构成图像的最基本元素,它实际上是一个个独立的小方格,每个像素都能记录它所在的位置和颜 ...

  6. jaspersoft 5.6.0 相关问题

    <property name="net.sf.jasperreports.export.xls.detect.cell.type" value="true" ...

  7. 成为 Linux 内核高手的四个方法

    (之前我在 CUSEC 网站发表了关于内核并不可怕的一篇文章,本文是后续.) 我曾经问别人如何开始内核编程的学习,他们基本上都说:1. 如果你不需要了解内核是如何为你工作的,你为何要尝试呢?2. 你应 ...

  8. Android 优化性能之 如何避免--过度绘制

    可能有些人不明白什么是过度绘制,简单言,我们app一个页面所显示的效果是由像素一帧一帧绘制而成.过度绘制就是意味着这一帧被绘制多次.如果是静态的布局,可能影响不是很大,如果是动态的,比如ListVie ...

  9. 解决magento保存产品时耗时很长的问题

    以前我在更新产品属性值(拿price为例)的时候,通常会这样做: foreach($product_ids as $id){ $product = Mage::getModel('catalog/pr ...

  10. UVA-Matrix Chain Multiplication(栈)

     Matrix Chain Multiplication  Suppose you have to evaluate an expression like A*B*C*D*E where A,B,C, ...