当前位置: 首页 > news >正文

dump文件生成代码

生成dump文件的代码

#include <windows.h>        // Windows API
#include <DbgHelp.h>       // 用于生成 dump 文件的 API#pragma comment(lib, "Dbghelp.lib") // 链接 Dbghelp.lib 库// 异常处理程序,用于处理未处理的异常
LONG WINAPI crashHandler(EXCEPTION_POINTERS* exceptionInfo) {// 设置生成的 dump 文件路径wchar_t dumpPath[MAX_PATH];wcscpy_s(dumpPath, MAX_PATH, L".\\dump.dmp"); // 使用当前目录下的 dump.dmp 文件// 创建 dump 文件HANDLE hFile = CreateFileW(dumpPath, GENERIC_WRITE, 0, nullptr, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, nullptr);if (hFile != INVALID_HANDLE_VALUE) {// 设置 MINIDUMP_EXCEPTION_INFORMATION 结构体MINIDUMP_EXCEPTION_INFORMATION exInfo;exInfo.ThreadId = GetCurrentThreadId();           // 获取当前线程 IDexInfo.ExceptionPointers = exceptionInfo;         // 指向异常信息的指针exInfo.ClientPointers = FALSE;                     // 是否使用客户端的指针// 写入 dump 文件MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(), hFile, MiniDumpNormal, &exInfo, nullptr, nullptr);CloseHandle(hFile); // 关闭文件句柄return EXCEPTION_EXECUTE_HANDLER; // 表示异常已处理}return EXCEPTION_CONTINUE_SEARCH; // 继续搜索其他异常处理程序
}// 在程序启动时设置未处理异常过滤器
SetUnhandledExceptionFilter(crashHandler);

使用方法

1、编译环境:确保使用支持 Windows API 的 C++ 编译器(如 MSVC)进行编译。

2、编译代码:
将上述代码复制到一个新的 C++ 源文件中(例如 CrashDumpExample.cpp),并在 Visual Studio 或其他 IDE 中编译。

3、执行程序:
运行编译好的可执行文件。程序在发生未处理异常时将生成 dump 文件。

4、触发异常:
为了测试异常处理,您可以在程序中故意触发异常。例如,您可以通过以下代码触发一个除零异常:

int main() {// 设置未处理异常过滤器SetUnhandledExceptionFilter(crashHandler);// 故意触发异常int x = 1 / 0; // 除以零,触发异常return 0;
}

5、查看 dump 文件:
运行程序后,将会在当前目录下生成一个名为 dump.dmp 的文件。您可以使用调试工具(如 Visual Studio 或 WinDbg)打开此文件,分析崩溃的堆栈信息。

注意事项

1、权限:确保程序有足够的权限来创建 dump 文件。在某些环境下,可能需要以管理员身份运行程序。

2、dump 文件大小:使用 MiniDumpNormal 选项时,生成的 dump 文件会包含基本的线程和堆栈信息。如果需要更多信息,可以使用 MiniDumpWithFullMemory 等选项。

3、环境:此代码在 Windows 平台上运行,不能在其他操作系统上使用。

4、Debugging Tools:要分析 dump 文件,您可以使用 Microsoft 提供的调试工具,如 WinDbg 或 Visual Studio 调试器。

5、清理:每次运行程序时,它都会覆盖旧的 dump 文件。如果需要保留多个 dump 文件,请修改 dumpPath 以包含时间戳或唯一标识符。


http://www.mrgr.cn/news/56767.html

相关文章:

  • mysql表添加索引
  • Cilium + ebpf 系列文章- (七)Cilium-LoadBalancer类型的SVC的IPPool
  • java高频面试题汇总
  • linux—基础命令及相关知识
  • Unity学习记录-API
  • 《深度学习》YOLO v1网络架构 、损失值、NMS极大值抑制
  • 编程新手小白入门最佳攻略
  • 【MATLAB源码-第187期】基于matlab的人工蜂群优化算法(ABC)机器人栅格路径规划,输出做短路径图和适应度曲线。
  • PC版Windows电脑微信双开|微信分身神器|同一台电脑端微信分身微信多开
  • 高频电源模块HXT240D10直流屏充电模块HXT240D05整流器HXT120D10
  • 国产数据库正在崛起,为什么少不了OceanBase?
  • lombok 总结
  • 1208. 尽可能使字符串相等
  • 杂项 基础知识整体
  • 使用皮尔逊相关系数矩阵进行特征筛选
  • element 按钮变形 el-button样式异常
  • 川菜出海平台国际市场系统功能开发分析
  • (自用复习题)常微分方程06
  • Nodejs访问.env配置文件
  • 可转债连载
  • 解决 @Scope 注解失效问题:深入理解与排查方法
  • 基于SSM的教务信息平台【附源码】
  • 关于SEO的自检、优化
  • JMeter压测
  • 【中华文化】懂得中国式饭局礼仪,让你更加出彩
  • 09 实战:PSNR值及其与原始图像对比系统