如何通过dump文件定位崩溃,解决问题
1、dump文件是附加堆栈信息的存储文件的简称,文件扩展名“.dmp”,通过dump文件我们可以得到程序运行某一时刻的堆栈数据。
2、当程序意外崩溃后,通常程序会立即中断运行,拿到这一时刻的dump文件就可以通过此时的堆栈进行分析,找到崩溃的代码并分析原因。
3、当程序遇到未处理异常(主要指非指针造成)导致程序崩溃,在程序开始处增加SetUnhandledExceptionFilter()函数,并在函数中利用适当的方法生成Dump文件,即可实现需要的功能。
4、调试器是如何来判别EXE、DLL等是否和一个pdb文件匹配呢? 每次我们链接EXE或者DLL或者SYS的时候,链接器都将产生一个唯一的GUID,然后将其写入到PDB和可执行文件。调试器加载的时候将检查两者的GUID,如果一致就表示他们匹配。
5、注:如果我们需要调试,我们需要查dmp文件,那么请妥善保管好自己的代码和pdb。每次重新编译,即使所有代码均没有变化,他们的GUID也不同。
6、用VS调试Release的程序,发现无法调试。其实,并不是Release的程序不能调试,而是没有让Release的程序生成pdb文件,VS无法加载pdb文件而无法调试程序。链接器-调试-生成调试信息设置一下就可以调试了。
7、本地dump调试:直接用VS打开XX.dmp文件,测试时dmp文件是本地产生的,因此VS会依据dmp文件自行找到exe,pdb和源代码的路径。因此直接点击调试,程序会出错代码行中断。
8、无源代码dump调试:若dmp文件是exe在另一台机器上产生的,则我们最好把exe,pdb,dmp放到同一文件夹下,必须保证pdb与出问题的exe是同一时间生成的,用VS打开dmp文件后还需要设置符号表文件路径和源代码路径。工具-选项-调试-符号。
9、调试dump文件时需要保证dump文件和exe、dll版本一致。只要是dump文件不是这个exe产生的,不管源代码是不是一样,结果都会提示找不到exe。
10、WinDbg调试:基本思路与VS一致,winDbg会提供更为全面的调试信息。
(1)设置pdb路径:File ->Symbol File Path
(2)设置exe路径:File -> Image File Path
(3)设置源代码路径:File -> Source File Path(指sln所在目录)
(4)打开dmp文件:File ->Open Crash Dump
(5)执行命令 !analyze –v
如何通过dump文件定位崩溃,解决问题的更多相关文章
- dump文件定位程序崩溃代码行
1.dump文件 2.程序对应的pdb 步骤一:安装windbg 步骤二:通过windbg打开crash dump文件 步骤三:设置pdb文件路径,即符号表路径 步骤四:运行命令!analyze -v ...
- VS2008通过 map 和 cod 文件定位崩溃代码行
VS 2005/2008使用map文件查找程序崩溃原因 一般程序崩溃可以通过debug,找到程序在那一行代码崩溃了,最近编一个多线程的程序,都不知道在那发生错误,多线程并发,又不好单行调试,终于找到一 ...
- Dump文件的生成和使用
版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/lk142500/article/detai ...
- 如何使用dump文件进行调试
转载[文尾出处链接] 1 简介第一次遇到程序崩溃的问题,之前为单位开发了一个插件程序,在本机运行没有出现问题,但把生成的可执行文件拷贝到服务器上一运行程序,刚进入插件代码,插件服务就崩溃了,当时被这个 ...
- 【Z】段错误Segment Fault定位,即core dump文件与gdb定位
使用C++开发系统有时会出现段错误,即Segment Fault.此类错误程序直接崩溃,通常没有任何有用信息输出,很难定位bug,因而无从解决问题.今天我们介绍core dump文件,并使用gdb进行 ...
- [转]让程序在崩溃时体面的退出之SEH+Dump文件
原文地址:http://blog.csdn.net/starlee/article/details/6649605 在我上篇文章<让程序在崩溃时体面的退出之SEH>中讲解了SEH中try/ ...
- 获取崩溃时的调用栈和生成dump文件,然后自动重启
首先要说明的是: linux 下 比较方便可以得到 崩溃时的调用栈,win下 比较难办 1. linux 获取调用栈 代码奉上: #include <execinfo.h> //在头 ...
- [转]让程序在崩溃时体面的退出之Dump文件
原文地址:http://blog.csdn.net/starlee/article/details/6630816 在我的那篇<让程序在崩溃时体面的退出之CallStack>中提供了一个在 ...
- 让程序在崩溃时体面的退出之Dump文件
在我的那篇<让程序在崩溃时体面的退出之CallStack>中提供了一个在程序崩溃时得到CallStack的方法.但是要想得到CallStack,必须有pdb文件的支持.但 ...
- c++ 程序崩溃生成Dump文件
#include "Windows.h"#include "DbgHelp.h" int GenerateMiniDump(PEXCEPTION_POINTER ...
随机推荐
- c语言学习--静态函数
静态函数 #include<stdio.h> //这是静态函数, 静态函数只能在当前文件调用,其他文件下面的函数是没法调用到这个函数的 static void fun1() { print ...
- git通过ssh方式免密克隆代码仓库
git上添加ssh公钥 略过 终端命令行 格式: git clone ssh://[user@]host.xz[:port]/path/to/repo.git/ 栗子: git clone ssh:/ ...
- python pip 换源
title: pip 换源 author: 杨晓东 permalink: pip-换源 date: 2021-10-02 11:27:04 categories: - 投篮 tags: - demo ...
- JS根据分数,计算名次(分数相同名次相同)
一开始的接口返回数据(数据已经拍好顺序,但是分数相同名次不同),如果数据未排序,先用sort排序,由大到小 分数相同名次相同,则需要以下操作即可 let prescore = 0;//初始分数 let ...
- stm32 flash/sram 映射关系
1.可以参考手册里关于Memory map的说明, 里面说明了Flash的起始地址与大小, SRAM起始地址与大小
- Dockerfile 参考
Dockerfile:FROM openjdk:8u252-jdkENV JHIPSTER_SLEEP=0 \ JAVA_OPTS="" \ LOGFILE="" ...
- javaweb自学书籍推荐
第一部分:Java语言篇 1.<Java编程规范> 适合对象:初级.中级 介绍:这本书的作者是被誉为Java之父的James Gosling,入门者推荐阅读,对基础的讲解很不错. 2.&l ...
- Token过期导致页面多个请求报错提示多次
关于Token过期导致页面多个请求报错提示的问题 我们先在全局定义一个变量(global.js)来控制token是否过期 export default { // token无效标记 TokenInva ...
- SQL 查询各表所占大小
SELECT OBJECT_NAME(id) tablename , CASE WHEN reserved * 8 > 1024 THEN RTRIM(8 * reserved / 1024) ...
- Coursera Programming Languages, Part B 华盛顿大学 Week 3
ML Versus Racket 同 函数编程模式 (with constructs that encourage a functional style) 不鼓励 mutation (但提供了支持 m ...