C++程序崩溃时,使用Windbg静态分析dump文件

news2024/11/29 18:21:39

Window环境下的C++程序如果发生异常崩溃,首先会和客户联系,让帮忙取特定目录下的dump文件和log文件来分析崩溃的原因。不过发生崩溃的话,从log一般分析不出特定原因,这时候dump文件就起作用了。可以通过Visual Studio和WinDbg来静态分析dump文件,定位发生异常的位置和调查可能的原因。

在本篇文章中,我们将介绍如何使用WinDbg工具来分析C++程序的dump文件。

1. 打开dump文件

首先,我们需要打开要分析的dump文件。在WinDbg中,选择File->Open Crash Dump,然后选择要打开的dump文件的路径。或者直接把dump文件拖进到WinDbg中。

2.查看异常上下文

打开dump文件后,输入.ecxr命令。
当系统发生异常时,异常处理器会记录下当前的上下文环境,并将此信息存储在这个寄存器中。通过这个命令可以查看这个寄存器的内容。还需配合其他命令,如kn/kv/kp等,进一步查看函数调用堆栈和相关变量内容,以帮助定位和解决问题。
在这里插入图片描述

3.查看函数调用堆栈

.ecxr命令后,接着输入kn/kv/kp命令,可以查看崩溃发生时的函数调用堆栈。但是还不能具体到函数名和行号。
如图,最终崩溃的地方虽然是系统dll,但是不可能是系统函数的原因,根据函数调用关系,应该查找我们自己程序调用系统函数的地方。到这里只能定位到是哪一个模块调用了系统函数(黑色遮盖区域)。
在这里插入图片描述

4.加载pdb文件

确定是哪一个模块发生异常后,找到和这个模块对应的pdb文件(根据模块生成的时间戳来确定,必须时间一致,否则pdb文件加载可能失败)。选择File->Open Crash Dump,设置pdb文件的目录,记得勾上reload,这样就可以自动去加载pdb文件了。

5.确定崩溃的具体位置

加载pdb文件后,重新输入.ecxr命令,切换到异常的上下文,再输入kn/kv/kp命令,查看函数的调用堆栈。此时可以定位到具体的函数名和行数了。蓝色框遮盖的地方就是调用系统函数的函数名,同时有明确的行数记载(在最右边,截图没有显示)。
在这里插入图片描述

补充

本文的截图是开发中的实例,最终崩溃的地方是系统函数,所以需要根据函数调用堆栈去找调用系统函数的模块,然后加载其pdb文件分析。如果崩溃的地方直接是自己的程序模块,直接加载对应的pdb文件就可以了。


C++程序崩溃时,用Visual Studio分析dump文件

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1176590.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

看看顶级外贸业务员是如何跟进客户的?

许多外贸业务员,都碰到过客户跟进上的困难。那到底外贸业务员如何跟进客户,才能越跟越近,最终成交呢?本篇文章设定了几个客户回复的场景,看看顶尖销售都是怎么应对的吧? 一 客户说暂时没有需求 1.问清楚客…

京东app地推拉新和京喜大赢家网推app拉新申请渠道 附全套攻略

京东app地推拉新和京喜大赢家网推拉新可以通过“聚量推客”申请 聚量推客是什么呢?一手官签服务商直营app拉新平台 京东app地推拉新项目和京喜大赢家网推拉新项目有什么区别呢? 京东app只能地推作业,京喜大赢家推广支持网推推广操作也更简…

【C语法学习】18 - fread()函数

文章目录 1 函数原型2 参数3 返回值4 示例 1 函数原型 fread():从与指定流stream相关联的二进制文件中读取数据块储存在str指向的内存空间中,函数原型如下: size_t fread(const void *ptr, size_t size, size_t count, FILE *stream)2 参数…

为什么大家都想找运营类的工作?

为什么大家都想找运营类的工作? 一、入门门槛 随着需求的持续增长,市场上的人员素质难以迅速匹配。在高校中,也难以培养出对口的应届毕业生。因此,许多企业在招聘运营人员时,更倾向于自行培养。对于新人的要求相对较低…

酒水展示预约小程序的效果如何

酒的需求度非常高,各种品牌、海量经销商组成了庞大市场,而在实际经营中,酒水品牌、经销商、门店经营者等环节往往也面临着品牌传播拓客引流难、产品展示预约订购难、营销难、销售渠道单一等痛点。 那么商家们应该怎样解决呢? 可以…

MTK RILD 无法启动问题分析

1、问题背景 Modem识别卡,但是UI无法识别卡,抓取问题机开机Log,发现RILJ一直在找寻RILD,但是无法获取相关服务,因此可以确认RILD Crash或出现异常。 但是在异常Log中搜索RILD,也未见相关关键字Log 2、对比实…

Springboot+vue的导师双选管理系统(有报告)。Javaee项目,springboot vue前后端分离项目。

演示视频: Springbootvue的导师双选管理系统(有报告)。Javaee项目,springboot vue前后端分离项目。 项目介绍: 本文设计了一个基于Springbootvue的前后端分离的导师双选管理系统,采用M(model&a…

享搭低代码平台:加速费用报销管理系统应用构建的利器

低代码平台的概念与优势 低代码平台是一种应用开发工具,它通过图形化界面和少量编码,使开发人员能够快速构建应用程序。它的优势包括提高开发效率、降低技术门槛、加强协作和灵活性等。 享搭低代码平台实现快速构建费用报销管理系统应用 在享搭低代码…

Web3.0的测试题

任务: 在前端开发一个查询UI,查询当前用户账户的ETH余额和指定ERC20合约中的余额 目标: UI框架指定使用 MUI (https://mui.com)需要查询到当前账户的ETH余额并展示在UI界面上需要输入ERC20合约地址后,查询到到当前账户在此ERC20…

【GEE】6、在 Google 地球引擎中构建各种遥感指数

1简介 在本模块中,我们将讨论以下概念: 如何在 GEE 中重命名图像的波段。如何使用已有的遥感指数。如何使用波段数学生成自己的遥感指数。 一个田地已经灌溉的年数的卫星图像。灌溉水最可能的来源是奥加拉拉含水层。图片来自科罗拉多州霍利奥克附近。资料…

测试开发路线大纲与总结

一、什么是测试开发? 测试开发(Test Development)是一种结合软件测试和软件开发的角色和实践。测试开发人员负责设计、开发和维护自动化测试工具、测试框架和测试脚本,以支持测试流程的自动化和优化。他们与开发团队和质量保证&a…

云尘靶场 Medium_Socnet 内网为docker 无站代理 不存在gcc的提权方式 解决ldd过高无法执行exp 指定so文件

首先我们可以通过 arp-scan 扫描当前内网中的存活 但是不知道为什么扫不出来 然后我们使用fscan可以获取存活 这里大致扫描只开了22端口 所以我们使用nmap进行信息收集扫描 nmap -sS -sV -A -p- 172.25.0.13通过tcp 进行 版本服务扫描 并且检测系统版本 全端口 这里我们可以…

VUE多语言i18n配置

1、i18n官网 格式化 | Vue I18n 2、安装i18n 8---指版本号 // vue2必须安装8版本的i18n包,vue3必须安装9版本的i18n包。 npm i vue-i18n8 3、卸载i18n npm uninstall vue-i18n 4、安装 js-cookie npm install vue-cookies --save 5、代码 5.1 main.js /…

睿思BI已支持3D图形

从睿思BI旗舰版V5.3开始,系统支持如下3D图形: 3D地球 3D地图 飞线图 3D金字塔 睿思BI采用ThreeJS实现3D功能,用户也可以基于系统接口,采用ThreeJS在数据大屏中实现自己的3D图形。 系统演示地址:睿思BI旗舰版https://…

BI数据可视化:不要重复做报表,只需更新数据

BI数据可视化是一种将大量数据转化为视觉形式的过程,使得用户可以更容易地理解和分析数据。然而,传统的报表制作过程往往需要手动操作,不仅耗时还容易出错。为了解决这个问题,BI数据可视化工具通常会提供一些自动化的数据更新功能…

台灯应该买什么样的才能护眼?一篇学会如果挑选护眼台灯

家里顶灯太暗了且高度太高,还是原始的LED灯,晚上用着眼睛都有点难受,还好遇到了儿童护眼灯。下面小编为大家介绍下儿童护眼灯哪个牌子好?什么护眼台灯比较专业 护眼台灯怎么样选择 1、照度级别 台灯照度级别分为 A 级和 AA 级。…

多模态情感分析——Twitter15和Twitter17数据集

一、原始数据集介绍 数据集链接: https://pan.baidu.com/s/1JLkaSerBgKe--GBaU0ZkFg?pwdfqyo提取码:fqyo 数据集介绍:原始的被划分为了训练集(60%)、验证集(20%)、测试集(20%&am…

【Java SE】详解数组

前言:在C语言中我们已经学习过数组,接下来,我们再主要学习一下Java中的数组,在Java中,数组变得更加高效和使用。 1. 数组的基本概念 1.1 什么是数组? 数组:可以看成是相同类型元素的一个集合。…

【计算机网络】HTTP 协议

文章目录 前言什么是 HTTP理解 HTTP 请求和响应格式HTTP 的请求格式1. 首行2. 请求头3. 空行4. 正文(body) HTTP 的响应格式1. 首行2. 响应头3. 空行4. 正文(body) 首行GET 和 POST 方法有什么区别针对 GET 方法和 POST 方法的区别…

Java——》CAS

推荐链接: 总结——》【Java】 总结——》【Mysql】 总结——》【Redis】 总结——》【Kafka】 总结——》【Spring】 总结——》【SpringBoot】 总结——》【MyBatis、MyBatis-Plus】 总结——》【Linux】 总结——》【MongoD…