引言

本文概述了使用 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. 前沿分享|阿里云资深技术专家 魏闯先:AnalyticDB PostgreSQL年度新版本发布

    ​简介: 本篇内容为2021云栖大会-云原生数据仓库AnalyticDB技术与实践峰会分论坛中,阿里云资深技术专家 魏闯先关于"AnalyticDB PostgreSQL年度新版本发布&qu ...

  2. 内含干货PPT下载|一站式数据管理DMS及最新解决方案发布

    ​简介: 今天主要给大家介绍一站式数据管理平台DMS以及解决方案的发布.议题包含企业数据管理当前的一些痛,DMS一站式数据管理平台以及其核心技术,实时数仓解决方案以及相应的应用实践. "数聚 ...

  3. 云原生消息、事件、流超融合平台——RocketMQ 5.0 初探

    简介: 今天分享的主题是云原生消息事件流超融合平台 RocketMQ 5.0 初探,内容主要分为三个部分: 首先,带大家回顾业务消息领域首选 RocketMQ 4 发展历史以及 4.x 版本的演进与发 ...

  4. [GPT] vue 的 quasar 框架 在 layout 模版中 如何获取 子页面当前使用的 useMeta

      在 Quasar 框架中,用 Vue Router 的 meta 字段来获取子页面当前使用的 useMeta . 首先,您需要在路由配置中设置子页面的 meta 字段.例如: const rout ...

  5. git fatal detected dubious ownership in repository 的解决方法

    我换了一台电脑,将旧电脑的硬盘换到新电脑上:我装了双系统,切换到另一个系统时:我发现了 git 代码仓库无法执行 git 命令,不断报错 fatal: detected dubious ownersh ...

  6. dotnet C# 如果在构造函数抛出异常 是否可以拿到对象赋值的变量

    如果使用某个变量去获取某个类型的对象创建,但是在这个类型的构造函数调用时抛出异常,请问此变量是否可以拿到对应的对象 如下面代码 private void F1() { Foo foo = null; ...

  7. 在.Net中操作redis

    在.Net中操作redis 一.环境 .Net 7 redis 7.2.4 二.所需类包 StackExchange.Redis 三.连接redis信息 appsettings.json配置redis ...

  8. 🔥httpsok彻底告别SSL证书续期烦扰

    httpsok彻底告别SSL证书续期烦扰 介绍 httpsok 是一个便捷的 HTTPS 证书自动续签工具,专为 Nginx .OpenResty 服务器设计.已服务众多中小企业,稳定.安全.可靠. ...

  9. 莫队算法(基础莫队)小结(也做markdown测试)

    莫队 基础莫队 本质是通过排序优化了普通尺取法的时间复杂度. 考虑如果某一列询问的右端点是递增的,那么我们更新答案的时候,右指针只会从左往右移动,那么i指针的移动次数是$O(n)$的. 当然,我们不可 ...

  10. 热更学习笔记10~11----lua调用C#中的List和Dictionary、拓展类中的方法

    [10]Lua脚本调用C#中的List和Dictionary 调用还是在上文中使用的C#脚本中Student类: lua脚本: print("------------访问使用C#脚本中的Li ...