windows 下C++生成Dump调试文件与分析

简介: windows 下C++生成Dump调试文件与分析

1、前言

dump文件是C++程序发生异常时,保存当时程序运行状态的文件,是调试异常程序重要的方法,所以程序崩溃时,除了日志文件,dump文件便成了我们查找错误的最后一根救命的稻草。

2、依赖库下载

生成dump需要有Dbghelp的库,正常来说VS、qt都自带了。如果没有,私信我发你。

3、项目配置

3.1、设置输出路径

步骤:右击项目-》属性-》配置属性-》常规 -》输出路径

设置一个固定的输出路径,是为了方便存放deghelp.dll动态库。

3.2、拷贝依赖资源

1、将头文件拷贝至和main.cpp同级。

2、将dbghelp.lib静态库dbghelp.dll动态库拷贝至输出目录下(如果没有输出目录,请先运行一遍程序即可)

3.3 将dbghelp.h添加在工程中

步骤:右击头文件目录-》点击添加-》现有项


3.4、配置lib文件路径

步骤:右击项目-》属性-》配置属性-》链接器 -》输入-》附加依赖项 输入dbghelp.lib


3.5、添加生成minidump文件方法

在main.cpp中添加MyUnhandledExceptionFilter方法。然后在main函数的开头添加SetUnhandledExceptionFilter(MyUnhandledExceptionFilter);代码。

#include <windows.h>
#include <Dbghelp.h>
LONG WINAPI MyUnhandledExceptionFilter(struct _EXCEPTION_POINTERS* ExceptionInfo)
{
    HANDLE lhDumpFile = CreateFile(L".\\bin_D\\miniDumpFile.dmp", GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
    MINIDUMP_EXCEPTION_INFORMATION loExceptionInfo;
    loExceptionInfo.ExceptionPointers = ExceptionInfo;
    loExceptionInfo.ThreadId = GetCurrentThreadId();
    loExceptionInfo.ClientPointers = TRUE;
    MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(), lhDumpFile, MiniDumpNormal, &loExceptionInfo, NULL, NULL);
    CloseHandle(lhDumpFile);
    return EXCEPTION_EXECUTE_HANDLER;
}
int main()
{
    SetUnhandledExceptionFilter(MyUnhandledExceptionFilter);
    //....
  return 0;
}


4、测试效果

在main中添加下面的代码,然后运行,将会在工作路径下看到miniDumpFile.dmp文件

int test(int a, int b)
{
    return a / b;
}
int main()
{
    SetUnhandledExceptionFilter(MyUnhandledExceptionFilter);
    int a = 1;
    int b = 0;
    std::cout << test(a, b) << std::endl;
    //....
  return 0;
}


见下图。

5、打开dump文件进行定位

有VS的情况下,可以直接双击xx.dmp文件。然后点击右侧的【仅限本机调试】

然后我们就可以看到程序崩溃的位置,这时我们还可以查看堆栈、内存的信息。加快排查错误。

目录
相关文章
Windows共享文件:探秘C++实现的B树索引算法奇境
在数字化时代,Windows共享文件的高效管理至关重要。B树算法以其自平衡多路搜索特性,在文件索引与存储优化中表现出色。本文探讨B树在Windows共享文件中的应用,通过C++实现具体代码,展示其构建文件索引、优化数据存储的能力,提升文件检索效率。B树通过减少磁盘I/O操作,确保查询高效,为企业和个人提供流畅的文件共享体验。
|
3月前
|
“由于启动计算机时出现了页面文件配置问题,Windows在你的计算机上创建了一个临时页面文件。。。”的问题解决
本文主要介绍了因清理电脑垃圾文件时误删虚拟内存导致的Windows页面文件配置问题,并提供了详细的解决步骤。问题表现为开机后出现临时页面文件创建的提示弹窗。解决方法包括通过控制面板或快捷键进入高级系统设置,进而调整虚拟内存设置:进入性能选项中的虚拟内存栏,选择自动管理所有驱动器的分页文件大小,最后确认并重启计算机以恢复正常运行。
1067 5
“由于启动计算机时出现了页面文件配置问题,Windows在你的计算机上创建了一个临时页面文件。。。”的问题解决
基于哈希表的文件共享平台 C++ 算法实现与分析
在数字化时代,文件共享平台不可或缺。本文探讨哈希表在文件共享中的应用,包括原理、优势及C++实现。哈希表通过键值对快速访问文件元数据(如文件名、大小、位置等),查找时间复杂度为O(1),显著提升查找速度和用户体验。代码示例展示了文件上传和搜索功能,实际应用中需解决哈希冲突、动态扩容和线程安全等问题,以优化性能。
C++ 之 perf+火焰图分析与调试
【11月更文挑战第6天】在遇到一些内存异常的时候,经常这部分的代码是很难去进行分析的,最近了解到Perf这个神器,这里也展开介绍一下如何使用Perf以及如何去画火焰图。
338 5
C++ 之 perf+火焰图分析与调试
【10月更文挑战第8天】在遇到一些内存异常的时候,经常这部分的代码是很难去进行分析的,最近了解到Perf这个神器,这里也展开介绍一下如何使用Perf以及如何去画火焰图。
148 1
|
9月前
|
Linux c/c++文件的基本操作
在Linux环境下使用C/C++进行文件的基本操作,包括文件的创建、写入、读取、关闭以及文件描述符的定位。
109 0
Linux c/c++文件的基本操作
|
9月前
|
Linux c/c++文件虚拟内存映射
这篇文章介绍了在Linux环境下,如何使用虚拟内存映射技术来提高文件读写的速度,并通过C/C++代码示例展示了文件映射的整个流程。
243 0
|
9月前
|
Linux c/c++文件移动
这篇文章介绍了在Linux环境下,使用C/C++语言通过命令方式和文件操作方式实现文件移动的方法。
226 0
【C++篇】深度解析类与对象(下)
在上一篇博客中,我们学习了C++的基础类与对象概念,包括类的定义、对象的使用和构造函数的作用。在这一篇,我们将深入探讨C++类的一些重要特性,如构造函数的高级用法、类型转换、static成员、友元、内部类、匿名对象,以及对象拷贝优化等。这些内容可以帮助你更好地理解和应用面向对象编程的核心理念,提升代码的健壮性、灵活性和可维护性。
c++模板初阶----函数模板与类模板
class 类模板名private://类内成员声明class Apublic:A(T val):a(val){}private:T a;return 0;运行结果:注意:类模板中的成员函数若是放在类外定义时,需要加模板参数列表。return 0;
45 0
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问