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

网站建设纪念币发售北京网站制作公司清远

网站建设纪念币发售,北京网站制作公司清远,环球外贸论坛官网,甘肃营销型网站制作程序自动生成Dump文件 前言:通过drwtsn32、NTSD、CDB等调试工具生成Dump文件, drwtsn32存在的缺点虽然NTSD、CDB可以完全解决,但并不是所有的操作系统中都安装了NTSD、CDB等调试工具。了解了mini dump文件格式后,完全可以程序自动…

程序自动生成Dump文件

前言:通过drwtsn32、NTSD、CDB等调试工具生成Dump文件, drwtsn32存在的缺点虽然NTSD、CDB可以完全解决,但并不是所有的操作系统中都安装了NTSD、CDB等调试工具。了解了mini dump文件格式后,完全可以程序自动生成Dump文件。

本文主要讨论以下内容:

1、  运行原理

2、  程序修改

3、  注意事项

一、   运行原理

当程序遇到未处理异常(主要指非指针造成)导致程序崩溃死,如果在异常发生之前调用了SetUnhandledExceptionFilter()函数,异常交给函数处理。MSDN中描述为:

Issuing SetUnhandledExceptionFilter replaces the existing top-level exception filter for all existing and all future threads in the calling process.

 

因而,在程序开始处增加SetUnhandledExceptionFilter()函数,并在函数中利用适当的方法生成Dump文件,即可实现需要的功能。

二、   程序修改

1、  重载 << 操作符。(本步可以不实现)

std::ostream& operator<<(std::ostream& os, const EXCEPTION_RECORD& red)

{

return os << "   Thread ID:" << GetCurrentThreadId()

<< "   ExceptionCode: " << red.ExceptionCode << "\n"

<< "   ExceptionFlags: " << red.ExceptionFlags << "\n"

<< "   ExceptionAddress: " << red.ExceptionAddress << "\n"

<< "   NumberParameters: " << red.NumberParameters;

}

2、  实现UnhandledExceptionFilter

#include "minidmp.h"

LONG WINAPI GPTUnhandledExceptionFilter(PEXCEPTION_POINTERS pExceptionInfo)

{

CreateMiniDump(pExceptionInfo, L"Exception.dmp");

           std::cerr << "未知错误:" << (*pExceptionInfo->ExceptionRecord) << std::endl;

           exit(pExceptionInfo->ExceptionRecord->ExceptionCode);

           

           return EXCEPTION_EXECUTE_HANDLER;  // 程序停止运行

}

3、  在异常发生之前调用SetUnhandledExceptionFilter(GPTUnhandledExceptionFilter);

通常在Main()函数开始时调用即可。

4、  CreateMiniDump()函数在minidmp.h头文件中定义,文件如下:

#pragma once

#include <windows.h>

#include <imagehlp.h>

#include <stdlib.h>

#pragma comment(lib, "dbghelp.lib")

 

inline BOOL IsDataSectionNeeded(const WCHAR* pModuleName)

{

  if(pModuleName == 0)

  {

     return FALSE;

  }

 

  WCHAR szFileName[_MAX_FNAME] = L"";

  _wsplitpath(pModuleName, NULL, NULL, szFileName, NULL);

 

  if(wcsicmp(szFileName, L"ntdll") == 0)

     return TRUE;

 

  return FALSE; 

}

inline BOOL CALLBACK MiniDumpCallback(PVOID                            pParam, 

                                const PMINIDUMP_CALLBACK_INPUT   pInput, 

                                PMINIDUMP_CALLBACK_OUTPUT        pOutput)

{

  if(pInput == 0 || pOutput == 0)

     return FALSE;

  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:

     return TRUE;

  default:;

  }

  return FALSE;

}

 

inline void CreateMiniDump(EXCEPTION_POINTERS* pep, LPCTSTR strFileName)

{

  HANDLE hFile = CreateFile(strFileName, GENERIC_READ | GENERIC_WRITE,

     0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);

 

  if((hFile != NULL) && (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 != 0) ? &mdei : 0, 0, &mci);

 

     CloseHandle(hFile); 

  }

}

三、   注意事项

1、  可执行文件(exe)必须找到dbghelp.dll,才能生成Dump文件。这个DLL可以从调试工具包中找到。

2、  当异常代码定位成功以后,如果无法阻止异常的产生,可以用 __try 结构包装异常代码,__try 和 try 不同,前者可以捕获非法指针产生的异常。

__try {

// 会异常的函数

}

__except( EXCEPTION_EXECUTE_HANDLER ){

// 异常处理

}
http://www.yayakq.cn/news/499127/

相关文章:

  • 中山网站建设价位领导视察网站建设
  • 自己ip做网站网络游戏加盟合作
  • 怎么自己制作一个好的网站全国高校校园网站建设与发展高级研修班
  • 100款免费软件网站大全wordpress慕课网
  • 如何设计网站中的上传功能杭州做兼职网站
  • 做资料分享网站暑假适合带孩子去哪里旅游
  • 做企业网站需要资质吗免费的网页模板网站
  • 企业是如何做电子商务网站成都网站建设公司兴田德润在哪儿
  • 网站建设有哪些分工分国内网站速度慢
  • 网站开发结束语如何创建一个简单的网页
  • 付费抽奖网站怎么做一学一做演讲视频网站
  • 做打折的淘宝小卖家的网站怎么做像滴滴一样网站
  • 明星网站怎么设计社交网站建设内容
  • 石家庄站布局图深圳网站建设做一个公司网站要多少钱
  • 学校网站建设具体分工wordpress分类自定义文字
  • 十大货源网站大全河南省建设厅门户网站
  • 上海网站建设友汇网站网络机房建设公司
  • 大庆市城乡建设局网站网页设计在邯郸能干什么
  • 企业网站建设公司名称宁波网络推广平台推荐
  • 北京视频网站建设Wordpress的高级版
  • 淮安网站制作设计一个公司的官网怎么做
  • 淘宝上做网站 源代码怎么给你网站搭建免费模板
  • 分析网易严选网站开发wordpress如何清缓存
  • 舟山工程建设信息网站网站流量站怎么做的
  • 哪个网站网页做的好看网站文章内链
  • 合肥网站建设哪家好价格wordpress 改系统
  • 潜江建设网站网站的专业
  • 个人手机版网站app怎么做怎么免费建立网店网站
  • 网页制作与网站建设试题seo网站诊断价格
  • 百度不收录手机网站吗上海市建设合同信息表网站