崩溃了没有生成dump的分析步骤


很大可能,在用户现场的时候,可能存在崩溃了但是没有生成dump的情况,可能只能有一些系统日志或者直接给你个截图什么的分析。那这种情况应该怎么分析呢?

#include "stdafx.h"

void Test()
{
	std::cout << "this is test!" <<std::endl;
	char* pTest = NULL;
	*pTest = '1';
}


int _tmain(int argc, _TCHAR* argv[])
{
	Test();
	system("pause");
	return 0;
}

1、系统日志的错误信息

首先我们可以看一下系统日志(控制面板\系统和安全\查看事件日志),打开事件查看器——windows日志——应用程序,根据崩溃的进程找到对应的错误日志

在常规页,我们可以知道以下信息:
错误应用程序名称以及版本
错误模块名称以及版本
异常代码
错误偏移量
错误进程ID
错误应用程序启动时间
错误应用程序路径
错误模块路径
报告ID
错误程序包全名
错误程序包相对应用程序ID

在这里,错误模块名称以及版本、错误偏移量对我们的分析起关键作用。
系统日志错误信息

2、分析崩溃

1、获取exe和pdb

在第1步中我们知道了崩溃的模块以及模块的版本(测试用的,只有本地一个,因此不存在查找之类的操作),接着去取对应的exe和pdb放在同一个目录下
exe和pdb

2、ide打开对应exe

打开exe时,选择使用PE,点击OK按钮
若弹出确认框,选择yes

在这里插入图片描述
菜单栏——打开——选择对应的exe文件——打开
打开exe
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

3、找基址

工具栏Edit——Segments——Rebase program…,如下

在这里插入图片描述

在这里插入图片描述
说明基址是:0x400000

4、查找错误位置

目前的代码显示的是汇编的,我们可以在IDA点击热键F5切换成C代码,如下
在这里插入图片描述

从上面,我们知道基址是0x400000,错误偏移量是 0x0000102c,因此计算一下:
0x400000 + 0x0000102c = 0x40102c

接下来我们跳转到这个地址,按‘G’,在弹出的地址栏中输入该值
在这里插入图片描述
得到
在这里插入图片描述
光标定位在该行,通过查看源代码,发现是这里有问题
在这里插入图片描述

这样我们就可以得到一个猜测的方向了

qbreakpad是一个用于捕获应用程序崩溃信息的开源库,它可以在Windows操作系统上生成dump文件以帮助开发人员进行故障排查和分析。 若在使用qbreakpad时未能生成dump文件,可能是以下原因之一: 1. 未正确集成qbreakpad库:qbreakpad的集成过程可能需要一些配置和设置,如链接与编译选项的修改等。如果未正确集成qbreakpad库,就无法生成dump文件。 2. 未进行符号表设置:符号表用于将崩溃时的地址转化为函数名和行号,使得dump文件更加可读和有用。如果未正确设置符号表,在生成dump文件中将无法提供函数名和行号信息。 3. 未捕获到崩溃事件:生成dump文件的前提是程序崩溃或异常终止。如果程序未出现崩溃或异常终止的情况,自然也就无法生成相应的dump文件。 4. 程序权限不足:有些操作系统和程序环境可能需要特定的权限才能生成dump文件。如果程序未具备足够的权限,就无法生成dump文件。 针对以上问题,可以按照以下步骤进行排查和解决: 1. 确认是否正确集成了qbreakpad库,并检查相关的配置和设置是否正确。 2. 确保在程序中正确设置了符号表,以便生成有用的dump文件。 3. 确认程序是否有可能触发崩溃或异常终止的情况,并模拟相应的情况。 4. 检查程序的运行权限,确保程序具备生成dump文件所需的权限。 通过以上排查和解决步骤,应能够解决qbreakpad在Windows系统下未能生成dump文件的问题。如果问题仍然存在,可以进一步查阅相关资料或向qbreakpad的支持渠道寻求帮助。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值