//文件名:DumpModule.h//使用说明:此文件是一个抓取程序出现异常时dump的头文件,使用时只需要包含就可以了,如果程序出现异常就会生成一个dump文件,在可执行文件的相同目录。#if !defined(_DUMPMODULE_H_FBFFBA7D_971E_48e0_A589_6FD14E8965B6)#define _DUMPMODULE_H_FBFFBA7D_971E_48e0_A589_6FD14E8965B6#if _MSC_VER >= 1000
#pragma once
#endif // _MSC_VER >= 1000#include <Windows.h>
#include <ImageHlp.h>
#include <Shlwapi.h>#pragma comment(lib, "DbgHelp.lib")
#pragma comment(lib, "Shlwapi.lib")inline BOOL IsDataSectionNeeded(LPCWSTR pModuleName)
{BOOL bReturn(FALSE);if (pModuleName){LPCWSTR pFileName = PathFindFileNameW(pModuleName);if (!lstrcmpiW(pFileName, L"ntdll.dll")){bReturn = TRUE;}}return bReturn;
}inline BOOL CALLBACK MiniDumpCallback(PVOID pParam, PMINIDUMP_CALLBACK_INPUT pInput, PMINIDUMP_CALLBACK_OUTPUT pOutput)
{BOOL bReturn(FALSE);if (pInput && pOutput){switch (pInput->CallbackType){case ModuleCallback:{if (pOutput->ModuleWriteFlags & ModuleWriteDataSeg){if (!IsDataSectionNeeded(pInput->Module.FullPath)){pOutput->ModuleWriteFlags &= (~ModuleWriteDataSeg);}}}case IncludeModuleCallback:case IncludeThreadCallback:case ThreadCallback:case ThreadExCallback:{bReturn = TRUE;}default:break;}}return bReturn;
}inline void CreateMiniDump(EXCEPTION_POINTERS* pep, LPCTSTR pszFileName)
{HANDLE hFile = CreateFile(pszFileName, GENERIC_READ | GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);if (hFile != INVALID_HANDLE_VALUE){MINIDUMP_EXCEPTION_INFORMATION mdei;mdei.ThreadId = GetCurrentThreadId();mdei.ExceptionPointers = pep;mdei.ClientPointers = FALSE;MINIDUMP_CALLBACK_INFORMATION mci;mci.CallbackRoutine  = (MINIDUMP_CALLBACK_ROUTINE)MiniDumpCallback;mci.CallbackParam = 0;MINIDUMP_TYPE mdt = (MINIDUMP_TYPE)(MiniDumpWithPrivateReadWriteMemory |MiniDumpWithDataSegs |MiniDumpWithHandleData |0x00000800 /*MiniDumpWithFullMemoryInfo*/ |0x00001000 /*MiniDumpWithThreadInfo*/ |MiniDumpWithUnloadedModules);MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(), hFile, mdt, (pep) ? &mdei : 0, 0, &mci);CloseHandle(hFile);}
}inline LONG WINAPI GPTUnhandledExceptionFilter(PEXCEPTION_POINTERS pExceptionInfo)
{SYSTEMTIME st = { 0 };::GetLocalTime(&st);TCHAR exeFullPath[MAX_PATH] = { 0 };GetModuleFileName(NULL, exeFullPath, MAX_PATH);PathRemoveExtension(exeFullPath);TCHAR dmpFullPath[MAX_PATH] = { 0 };wsprintf(dmpFullPath, _T("%s%04d%02d%02d%02d%02d%02d.dmp"), exeFullPath, st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond);CreateMiniDump(pExceptionInfo, dmpFullPath);return EXCEPTION_CONTINUE_SEARCH;
}extern "C" __declspec(selectany) LPTOP_LEVEL_EXCEPTION_FILTER g_pExcepFilter = SetUnhandledExceptionFilter(GPTUnhandledExceptionFilter);#pragma comment(linker, "/include:_g_pExcepFilter")#endif // !defined(_DUMPMODULE_H_FBFFBA7D_971E_48e0_A589_6FD14E8965B6)

抓取dump的头文件相关推荐

  1. 如何手工抓取dump文件及分析

    在生产环境下进行故障诊断时,为了不终止正在运行的服务或应用程序,有两种方式可以对正在运行的服务或应用程序的进程进行分析和调试. 首先一种比较直观简洁的方式就是用WinDbg等调试器直接attach到需 ...

  2. 介绍一个好用的抓取dump的工具-ProcDump

    Procdump是一个轻量级的Sysinternal团队开发的命令行工具, 它的主要目的是监控应用程序的CPU异常动向, 并在此异常时生成crash dump文件, 供研发人员和管理员确定问题发生的原 ...

  3. IIS崩溃时自动抓取Dump

    原文:IIS崩溃时自动抓取Dump 背景:在客户现场,IIS有时会崩溃,开发环境没法重现这个bug,唯有抓取IIS的崩溃是的Dump文件分析. IIS崩溃时自动抓取Dump,需要满足下面几个条件 1. ...

  4. 你需要知道的 N 种抓取 dump 的工具

    原总结注册表debug调试dump转储文件windbgprocdump 前言 今天,向大家介绍几种可以抓取应用程序转储文件的工具及基本使用方法.更详细的用法,请参考每个工具对应的帮助文档.如果你还不清 ...

  5. 使用Adplus抓取Dump小结

    Adplus抓取Dump有三种方式: 一种是Hang模式 adplus -hang -pn Prs.exe -o c:/dump -quit /2/当进程进程运行时生成dump 二是Crash模式 a ...

  6. XP下软件崩溃,adplus抓取Dump方法

    我公司开发的软件在XP平台下屡次崩溃,最近更新了依然没有解决,故使用windows调试工具进行dump抓取分析原因 工具: dbg_x86_Tools_for_windows 微软说明文档 https ...

  7. 在linux下vcd光盘提取,linux下抓取Vcd的视频文件[Linux安全]

    赞助商链接 本文"linux下抓取Vcd的视频文件[Linux安全]"是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判 ...

  8. php抓取curl下载文件,PHP 利用 Curl 函数实现多线程抓取网页和下载文件

    PHP 利用 Curl Functions 可以完成各种传送文件操作,比如模拟浏览器发送GET,POST请求等等,然而因为php语言本身不支持多线程,所以开发爬虫程序效率并不高,因此经常需要借助Cur ...

  9. python抓取网页内容到excel_Python实现抓取网页生成Excel文件的方法示例

    本文实例讲述了Python实现抓取网页生成Excel文件的方法.分享给大家供大家参考,具体如下: Python抓网页,主要用到了PyQuery,这个跟jQuery用法一样,超级给力 示例代码如下: # ...

最新文章

  1. 斯坦福大学Christopher Manning:Transformer语言模型为什么能取得突破
  2. 300 多行代码搞定微信 8.0 的「炸」「裂」特效!
  3. golang 编译后文件过大问题处理
  4. linux lua ide,mac os上开发lua用什么ide
  5. Tensorflow【实战Google深度学习框架】使用 HDF5 处理大型数据集with TFLearn
  6. android 串口开发_详细分析Esp8266上电信息打印的数据,如何做到串口通讯上电不乱码打印...
  7. 虚拟化方案应用场景及优劣
  8. deepin--更改最低亮度
  9. [20180914]oracle 12c 表 full_hash_value如何计算.txt
  10. SAP Fiori Elements里的SAP自定义注解annotation sap-text
  11. (C++版)链表(三)——实现双向链表的创建、插入、删除等简单操作
  12. java方法调用的格式_Java基础(一)---方法的调用
  13. 摄像头安装说明_老司机告诉你马路上不同摄像头有不同作用,注意区分小心扣分...
  14. zabbix 自动化之网络发现
  15. ios App内评价问题
  16. 2.啊哈!算法 --- 一大波数正在靠近——栈、队列、链表
  17. 使用docker安装easy-mock
  18. python命名空间,类成员,对象成员
  19. 遇到错误(firefox 打不开 重置winsock bug)
  20. Redis下载和安装

热门文章

  1. shiro认证与授权:基于ini的用户授权
  2. 请使用日期时间相关的API,计算出一个人已经出生了多少天
  3. Direct交换器-编写生产者
  4. RocketMQ API使用简介、拉取机制
  5. ios键盘横屏_iOS横竖屏旋转及其基本适配方法 转
  6. 一个完整网站的代码_网站优化三步走,怎样给自己的网站做优化?
  7. nginx配置文件详细解读
  8. 在 C/C++ 中使用 TensorFlow 预训练好的模型—— 直接调用 C++ 接口实现
  9. HSRP双机热备工作原理与配置
  10. VueJS ReactJS 如何?听听别人怎么说。