引言

本文概述了使用 WinDbg 的一些必要步骤。

准备工作

第一步,你必须更改系统的配置使其能够生成 PDB 文件,包括 Release 版本。近期的 Visual C++ 编译器默认启用此配置,但早期某些版本编译器需要你手动开启此选项。保留每个版本的 PDB 文件,这很重要!

第二步,你必须确定生成 dump 文件的应用程序版本。当你自己生成了 MiniDumps(比如通过调用 MiniDumpWriteDump())的时候,最好在 MiniDump 的文件名里加上应用程序的完整版本号。当然,这需要有一个完善的版本控制机制,比如任何分支的任何编译都会更新版本号。

现在假设你已经获取了 dump 文件,你准确地知道生成 dump 文件的应用程序版本,以及该版本的 PDB 文件。

第三步,在你的代码库历史记录中找到该版本的源代码,放在一个单独目录。

开始调试

现在你可以选择使用 WinDbg 或者 Visual C++ 来调试 dump 文件了。使用 Visual Studio 更加简单,但是 WinDbg 更加强大。大多数情况下 Visual Studio 的功能已经能够满足需求了。

如果使用 Visual Studio,你需要在 Visual Studio 中添加文件的方式打开 dump 文件:

然后 debug dump 文件。如果所有的路径(源代码和 PDB 文件)都配置正确,那么你就能够调试到 crash 的地方,查看 call stack 等内容。

如果使用 WinDbg,你需要:

  1. 打开 WinDbg 工具
  2. 打开 dump 文件(默认是 Ctrl + D)
  3. 告诉 WinDbg 加载正确的 MicroSoft symbol 文件,命令:.symfix,这个过程可能需要一些时间
  4. 告诉 WinDbg 加载 程序的 PDB 文件,命令:.sympath+ c:\pdblocation,将 "c:\pdblocation" 替换为你自己的 PDB 路径。注意 .sympath+ 之间不要有空格,否则可能会破坏步骤 3. 中的工作。
  5. 告诉 WinDbg 源代码的位置,命令:.srcpath c:\app_build_1.0.100,将 "c:\app_build_1.0.100" 替换为你自己的源代码路径。
  6. 告诉 WinDbg 可以开始分析 dump 文件了,命令:!analyze -v

如果所有配置都是正确的,那么后面 WinDbg 就会运行到 crash 的位置,之后你就可以对应用程序进行深入分析,这部分内容不在本文讨论范围之内。

引用

https://stackoverflow.com/questions/734272/how-to-use-windbg-to-analyze-the-crash-dump-for-vc-application

如何使用 Dump 文件?的更多相关文章

  1. 使用GDB 追踪依赖poco的so程序,core dump文件分析.

    前言 在windows 下 系统核心态程序蓝屏,会产生dump文件. 用户级程序在设置后,程序崩溃也会产生dump文件.以方便开发者用windbg进行分析. so,linux 系统也有一套这样的东东- ...

  2. 使用MAT(Memory Analyzer Tool)工具分析dump文件--转

    原文地址:http://gao-xianglong.iteye.com/blog/2173140?utm_source=tuicool&utm_medium=referral 前言 生产环境中 ...

  3. gdb调试常用实用命令和core dump文件的生成

      1.生成core dump文件的方法: $  ulimit -c //查看是否为0 如果为0 $   ulimit -c unlimited 这样在程序崩溃以后会在当前目录生成一个core.xxx ...

  4. 使用dbghelp生成dump文件以及事后调试分析

    前言 在产品的实际应用环境中,如果我们的程序在客户那里出现了问题,例如程序异常了,而这个时候的现象又不能还原或者很难还原重现,那么只有使用dump文件来保存程序的当前运行信息,例如调用堆栈等,同时使用 ...

  5. 蓝屏 Dump文件分析方法

    WinDbg使用有点麻烦,还要符号表什么的.试了下,感觉显示很乱,分析的也不够全面... 试试其他的吧!今天电脑蓝屏了,就使用其dump文件测试,如下: 1.首先,最详细的,要属Osr Online这 ...

  6. 调试SQLSERVER (一)生成dump文件的方法

    调试SQLSERVER (一)生成dump文件的方法 调试SQLSERVER (二)使用Windbg调试SQLSERVER的环境设置调试SQLSERVER (三)使用Windbg调试SQLSERVER ...

  7. Windows Phone App的dump文件实例分析- System.ExecutionEngineException

    前言 在开始这篇文章之前我们先来讲讲如何从高度优化的Release版的Dump中找到正确的异常上下文地址,并手动恢复异常发生的第一现场. 1. 什么是异常上下文 简单来说,在windows体系的操作系 ...

  8. linux下生成core dump文件方法及设置

    linux下生成core dump文件方法及设置    from:http://www.cppblog.com/kongque/archive/2011/03/07/141262.html core ...

  9. linux 下如何打开core dump文件开关

    dump文件可以在程序crash时,方便我们查看程序crash的地方和上下文信息.在window下,要能生成dump文件,需要自己编写相应的代码.不过现在网上可以找到相应的代码,只要把它下载后然后加到 ...

  10. 【转】SVN的dump文件导入

    转载地址:http://erniu.sz.blog.163.com/blog/static/11517292220103282813176/ 把SVN的dump文件导入SVN数据库的方法: 在SVN ...

随机推荐

  1. 开源微服务编排框架:Netflix Conductor

    简介:本文主要介绍netflix conductor的基本概念和主要运行机制. ​ 作者 | 夜阳 来源 | 阿里技术公众号 本文主要介绍netflix conductor的基本概念和主要运行机制. ...

  2. [Go] 注意 go build -o <output> 选项的准确含义

    -o <output> 选项强制执行把构建的可执行文件写入到目标文件或者目标目录中. 如果 output 是已存在的目录,那么所有构建好的文件都将写入到该目录中. 注意:如果目录不存在的话 ...

  3. 最强AI直播换脸软件,DeepFaceLive下载介绍

    DeepFaceLive是一款专注于直播实时换脸的AI软件,使用经过长时间训练的人脸模型替换摄像头中的人脸,能够产生接近电影质量的面部合成效果,提供高保真的视觉体验,在新版本中也支持了图片换脸(视频换 ...

  4. Gradle8.4构建SpringBoot多模块项目

    Gradle8.4构建SpringBoot多模块项目 一.基本 1.版本 这个版本是Jdk8最后一个SpringBoot版本 软件 版本 Gradle 8.4 SpringBoot 2.7.15 JD ...

  5. .net 记录http请求

    记录http请求 环境 .net7 一.过滤器(Filter) 这个过程用的的是操作过滤器(ActionFilter) 二. 2.1 继承IAsyncActionFilter 2.2 重写OnActi ...

  6. keepalived(3)- keepalived+nginx实现WEB负载均衡高可用集群

    目录 1. keepalived+nginx实现WEB负载均衡高可用集群 1.1 需求和环境描述 1.2 WEB集群部署 1.3 负载均衡集群部署 1.4 keepalived部署 1.5 测试监控的 ...

  7. 了解Oracle中的Dual系统表

    首发微信公众号:SQL数据库运维 原文链接:https://mp.weixin.qq.com/s?__biz=MzI1NTQyNzg3MQ==&mid=2247485212&idx=1 ...

  8. 基于 three.js 加载器分别加载模型

    点击查看代码 /** * 参数:模型文件路径,成功回调函数 * * 基于 three.js 加载器分别加载模型 * * 全部加载后通过回调函数传出打印 */ import { FBXLoader } ...

  9. 效率工具mysoV0.3.0功能介绍

      也许大家在日常工作中,有使用过提升效率的工具,比如快速搜索文件的Everything:火柴:Listary等,这些工具都在一定程度上提升您的工作效率.myso作为后来者,跟上述软件一样,也是为提升 ...

  10. C数据结构线性表:最全链表实战剖析—单 双 循环链表&增删改查

    文章目录 前言 说明1 说明2 A:关于为什么传链表要用二级指针 B:单链表 1:定义结构体 2:初始化链表 3:销毁链表内容 (释放整个链表空间,把L指针赋值为NULL ) 4:增加某一个位置上的元 ...