利用 dump 文件调试 release 程序

当C++程序在本地运行正常但在其他环境中出现意外关闭时,通过try-catch异常处理可能不够直接。文章介绍了利用内存转储文件进行调试的方法,特别是在VS2010环境下,通过链接Dbghelp.lib库并在程序崩溃时生成.dmp文件,然后用VS打开该文件进行调试。这种方式对于分析数组越界等导致的程序异常非常有用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

真实开发过程中会遇到这种情况,程序在自己的电脑上运行的很好,但是交付之后就会经常莫名其妙的 关闭
通常的做法是 给运行的程序 加上 try catch ,分析catch到的log来分析,这对于java来说是非常好的方法
printStackTrace() 不仅可以打印 错误类型,还可以打印错误堆栈,这是依赖于jvm虚拟机的
但是 C++ 的异常处理 如果显示堆栈的话比较麻烦,网上这种代码很多 ,在这里我们说另外一种方式 : 内存转储文件

内存转储就是在程序运行崩溃的时候把 内存的信息打印到 一个文件中,通过对这个文件的分析来 来调试程序
一个完整的代码例子:

#include <iostream>
#include <string>

#include <Windows.h>
#include <DbgHelp.h>


using namespace std;

void CreateDumpFile(LPCSTR lpstrDumpFilePathName, EXCEPTION_POINTERS *pException) ; 
LONG ApplicationCrashHandler(EXCEPTION_POINTERS *pException);

void CreateDumpFile(LPCSTR lpstrDumpFilePathName, EXCEPTION_POINTERS *pException)  
{  
	// 创建Dump文件   
	//   
	HANDLE hDumpFile = CreateFile(lpstrDumpFilePathName, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);  

	// Dump信息   
	//   
	MINIDUMP_EXCEPTION_INFORMATION dumpInfo;  
	dumpInfo.ExceptionPointers = pException;  
	dumpIn
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值