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. JavaScript之ClassName属性学习

    在前面的style属性学习中,知道了通过style属性可以控制元素的样式,从而实现了行为层通过DOM的style属性去干预变现层显示的目地,但是这种就是不好的,而且为了实现通过DOM脚本设置的样式,你 ...

  2. jquery常用语句总结

    一.jquery中text val html attr的使用区别 html和innerHTMl是一样的,可以获得和设置指定元素如<p>中的html标签和文本如:设置值: $("p ...

  3. Matlab中边缘提取方法简析

    1.Matlab简述 Matlab是国际上最流行的科学与工程计算的软件工具,它起源于矩阵运算,已经发展成一种高度集成的计算机语言.有人称它为“第四代”计算机语言,它提供了强大的科学运算.灵活的程序设计 ...

  4. html5 meta标签

     <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-sca ...

  5. 如何为你的美术妹子做Unity的小工具(一)

    在上的工具栏添加   也就是这个位置

  6. Linux流量监控工具使用总结 - iftop

    在类Unix系统中可以使用top查看系统资源.进程.内存占用等信息.查看网络状态可以使用netstat.nmap等工具.若要查看实时的网络流量,监控TCP/IP连接等,则可以使用iftop. 一.if ...

  7. JS计算两个日期相差几天

    function Computation(sDate1, sDate2){ var aDate, oDate1, oDate2, iDays aDate = sDate1.split("-& ...

  8. codevs 1183 泥泞的道路 01分数规划

    题目链接 题目描述 Description CS有n个小区,并且任意小区之间都有两条单向道路(a到b,b到a)相连.因为最近下了很多暴雨,很多道路都被淹了,不同的道路泥泞程度不同.小A经过对近期天气和 ...

  9. 关注SSO

    https://wiki.jasig.org/display/CASC/Configuring+the+Jasig+CAS+Client+for+Java+in+the+web.xml 其余的看osc ...

  10. Windows 技巧

    1.反选 快捷键: Alt+E+I 2. windows7 以上 cmd命令 切换目录 F:\>cd /d c:\windowsc:\Windows> 3.