dump文件定位程序崩溃代码行
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文件定位程序崩溃代码行的更多相关文章
- 使用MAP文件快速定位程序崩溃代码行 (转)
使用MAP文件快速定位程序崩溃代码行 =========================================================== 作者: lzmfeng(http://lz ...
- iOS定位到崩溃代码行数
不知道大家是不是在代码调试过程中经常遇到项目崩溃的情况: 比如: 数组越界: 没有实现方法选择器: 野指针: 还有很多很多情况.......昨天学到了一种可以直接定位到崩溃代码行数的一个命令,记录一下 ...
- VS2008通过 map 和 cod 文件定位崩溃代码行
VS 2005/2008使用map文件查找程序崩溃原因 一般程序崩溃可以通过debug,找到程序在那一行代码崩溃了,最近编一个多线程的程序,都不知道在那发生错误,多线程并发,又不好单行调试,终于找到一 ...
- linux设备驱动第四篇:从如何定位oops的代码行谈驱动调试方法
上一篇我们大概聊了如何写一个简单的字符设备驱动,我们不是神,写代码肯定会出现问题,我们需要在编写代码的过程中不断调试.在普通的c应用程序中,我们经常使用printf来输出信息,或者使用gdb来调试程序 ...
- VS2005(vs2008,vs2010)使用map文件查找程序崩溃原因
VS 2005使用map文件查找程序崩溃原因 一般程序崩溃可以通过debug,找到程序在那一行代码崩溃了,最近编一个多线程的程序,都不知道在那发生错误,多线程并发,又不好单行调试,终于找到一个比较好的 ...
- 通过map文件找程序崩溃的代码行
一,配置vs 二,程序崩溃界面 // ConsoleApplication1.cpp : 此文件包含 "main" 函数.程序执行将在此处开始并结束. // #include &l ...
- 统计文件夹下java代码行数的小程序--主要是学习任务队列的思想
首先感谢czbk的老师,录制的视频,让我们有这么好的学习资料.……—— 统计文件夹java文件的行数,首先想到的肯定是用递归的方法,因为文件夹下面可能包含文件夹,用递归的方法,代码容易写.(这和写简单 ...
- VEH帮你定位程序崩溃地址
之前朋友有一个服务端程序,总是受到一些人的恶意漏洞攻击,没有源代码,只好反汇编修复了漏洞,并且使用WinLicense加保护授权. 漏洞总不是一次可以修复完的,恶意攻击并没有停止,然后加了WL保护程序 ...
- 使用python对文件夹里面所有代码行数进行统计。
统计目录下所有的代码个数和总行数. # -*- coding: utf-8 -*- # @Author : ydf import json import os from pathlib import ...
随机推荐
- Spring MVC 完整示例
在本例中,我们将使用Spring MVC框架构建一个入门级web应用程序.Spring MVC 是Spring框架最重要的的模块之一.它以强大的Spring IoC容器为基础,并充分利用容器的特性来简 ...
- VlanTrunk
简单的vlan trunk的配置: 第一步:添加vlan 1 Switch>enable 2 Switch#show vlan VLAN Name Status Ports ---- ----- ...
- visio 2013 破解工具 - KMSpico
背景:环境是 win7, 64 bit装了 visio 2013 , 可以却不能用它来画图,在网上找了一些破解工具,大都不能解决问题.网上不靠谱的广告型文章太多了,比较头痛. 所幸,终于找到正确的破解 ...
- vim vimrc
set nu set shiftwidth= set tabstop= set softtabstop= set autoindent set cindent set smartindent file ...
- Hadoop学习之shuffle过程
转自:http://langyu.iteye.com/blog/992916,多谢分享,学习Hadopp性能调优的可以多关注一下 Shuffle过程是MapReduce的核心,也被称为奇迹发生的地方, ...
- Nanjing GDG Meetup 10月19日线下活动
Nanjing GDG 10 月份的线下活动将在本周六 (10/19) 举办,这次会请到对所有开发者都有重要帮助的神器 GoAgent 的作者 Phus Lu 来给我们做一场分享,热烈欢迎大家报名参 ...
- 练习:一只豆瓣电影TOP250的爬虫
练习:一只豆瓣电影TOP250爬虫 练习:一只豆瓣电影TOP250爬虫 ①创建project ②编辑items.py import scrapyclass DoubanmovieItem(scrapy ...
- java计算器
由于自己的实验报告 需要用Java来写一个实验报告.自己本没有怎么学过Java,但是学的话也就认真的学一下,毕竟技术这条路线是技多不压身.于是在网站上找来了一些资料,关于Java到底是干什么的, ...
- hdu 3530 Subsequence 单调队列
题目链接 题目给出n个数, 一个下界m, 一个上界k, 让你求出最长的一段序列, 满足这段序列中的最大的数-最小的数<=k&&>=m, 输出这段长度. 可以维护两个队列, ...
- hdu 4902 Nice boat 线段树
题目链接 给n个数, 两种操作, 第一种是将区间内的数变成x, 第二种是将区间内大于x的数变为gcd(x, a[i]). 开三个数组, 一个记录区间最大值, 这样可以判断是否更新这一区间, 一个laz ...