七月网

minidump(minidump蓝屏解决方法)

七月网4940

一、如何让程序抓到dump文件,MiniDumpWriteDump

程序崩溃(crash)的时候,为了以后能够调试分析问题,可以使用WinDBG要把当时程序内存空间数据都保存下来,生成的文件称为dump文件。

minidump(minidump蓝屏解决方法)

1)打开WinDBG并将之Attach到crash的程序进程

WinDBg产生dump文件的命令是.dump,可以选择不同的参数来生成不同类型的dump文件。

命令行示例:.dump/m C:\dumps\myapp.dmp

注解:缺省选项,生成标准的minidump,转储文件通常较小,便于在网络上通过邮件或其他方式传输。这种文件的信息量较少,只包含系统信息、加载的模块(DLL)信息、进程信息和线程信息。

命令行示例:.dump/ma C:\dumps\myapp.dmp

注解:带有尽量多选项的minidump(包括完整的内存内容、句柄、未加载的模块,等等),文件很大,但如果条件允许(本机调试,局域网环境),推荐使用这中dump。

命令行示例:.dump/mFhutwd C:\dumps\myapp.dmp

注解:带有数据段、非共享的读/写内存页和其他有用的信息的minidump。包含了通过minidump能够得到的最多的信息。是一种折中方案。

上面介绍如如何用WinDBG生成crash dump《WinDBG技巧:如何生成Dump文件(.dump命令)》,但是用户机器上通常不安装WinDBG,而且多数用户也不知道怎么使用WinDBG。所以最好是自己程序里面能够捕捉exception/crash,并且生成crash dump,然后通过网络传回到自己服务器。

捕捉exception可以用API函数 SetUnhandledExceptionFilter。

生成crash dump可以用DbgHelp.dll里面的MiniDumpWriteDump函数。

LPTOP_LEVEL_EXCEPTION_FILTER WINAPI SetUnhandledExceptionFilter(__in LPTOP_LEVEL_EXCEPTION_FILTER lpTopLevelExceptionFilter);

BOOL WINAPI MiniDumpWriteDump(__in HANDLE hProcess,__in DWORD ProcessId,__in HANDLE hFile,__in MINIDUMP_TYPE DumpType,__in PMINIDUMP_EXCEPTION_INFORMATION ExceptionParam,__in PMINIDUMP_USER_STREAM_INFORMATION UserStreamParam,__in PMINIDUMP_CALLBACK_INFORMATION CallbackParam);

LONG WINAPI MyUnhandledExceptionFilter(struct _EXCEPTION_POINTERS*pExceptionPointers)

SetErrorMode( SEM_NOGPFAULTERRORBOX);

strBuild.Format(L"Build:%s%s",__DATE__,__TIME__);

WCHAR szModuleName[MAX_PATH]= L"";

GetModuleHandleEx(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS,(LPCWSTR)pExceptionPointers->ExceptionRecord->ExceptionAddress,&hModule);

GetModuleFileName(hModule, szModuleName, ARRAYSIZE(szModuleName));

strError.AppenedFormat(L"%s%d,%d,%d.",szModuleName,pExceptionPointers->ExceptionRecord->ExceptionCode,pExceptionPointers->ExceptionRecord->ExceptionFlags,pExceptionPointers->ExceptionRecord->ExceptionAddress);

MINIDUMP_EXCEPTION_INFORMATION ExpParam;

GetTempPath( dwBufferSize, szPath);

StringCchPrintf( szFileName, MAX_PATH, L"%s%s", szPath, szAppName);

CreateDirectory( szFileName, NULL);

StringCchPrintf( szFileName, MAX_PATH, L"%s%s\\%s-%04d%02d%02d-%02d%02d%02d-%ld-%ld.dmp",

stLocalTime.wYear, stLocalTime.wMonth, stLocalTime.wDay,

stLocalTime.wHour, stLocalTime.wMinute,stLocalTime.wSecond,

GetCurrentProcessId(), GetCurrentThreadId());

hDumpFile= CreateFile(szFileName, GENERIC_READ|GENERIC_WRITE,

FILE_SHARE_WRITE|FILE_SHARE_READ, 0, CREATE_ALWAYS, 0,0);

MINIDUMP_USER_STREAM UserStream[2];

MINIDUMP_USER_STREAM_INFORMATION UserInfo;

UserInfo.UserStreamArray= UserStream;

UserStream[0].Type= CommentStreamW;

UserStream[0].BufferSize= strBuild.GetLength()*sizeof(WCHAR);

UserStream[0].Buffer= strBuild.GetBuffer();

UserStream[1].Type= CommentStreamW;

UserStream[1].BufferSize= strError.GetLength()*sizeof(WCHAR);

UserStream[1].Buffer= strError.GetBuffer();

ExpParam.ThreadId= GetCurrentThreadId();

ExpParam.ExceptionPointers= pExceptionPointers;

ExpParam.ClientPointers= TRUE;

MINIDUMP_TYPE MiniDumpWithDataSegs= MiniDumpNormal

| MiniDumpWithIndirectlyReferencedMemory

| MiniDumpWithProcessThreadData

bMiniDumpSuccessful= MiniDumpWriteDump(GetCurrentProcess(),GetCurrentProcessId(),

hDumpFile, MiniDumpWithDataSegs,&ExpParam, NULL,NULL);

//上传mini dump到自己服务器(略)

return EXCEPTION_CONTINUE_SEARCH;//或者 EXCEPTION_EXECUTE_HANDLER关闭程序

SetUnhandledExceptionFilter(MyUnhandledExceptionFilter);

正常情况下不会生成dump,需要自己在程序中添加代码实现,一般是利用MS的dbghelp.dll提供的DbgHelpCreateUserDump来生成,用WinDbg来分析,期间需要编译程序生成的.pdb文件。可以参考BlackBox、google breakpad等

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug]

"Debugger"="\"D:\\WinDBG\\ntsd.exe\"-p%ld-e%ld-g-noio-c\".dump/ma/u d:\\dbgdmp\\dmp.dmp; q"

"UserDebuggerHotKey"=dword:00000000

二、C盘里的minidump文件夹里的文件可以删除吗

1、删除dump文件:打开电脑的C盘,找到Windows文件夹,进入Minidump文件夹,将其中的dump文件全部删除。

2、dumps文件完全可以删除,dumps文件夹下的dump文件只用于分析错误,如果不需要,那么删除即可。

3、在Windows操作系统中,通常建议不要删除C盘下的任何文件或文件夹,因为其中包含了许多系统和应用程序所必需的文件和设置,删除它们可能会导致系统出现问题或无法启动。

4、可以删minidump这是电脑出现蓝屏时系统存储相关蓝屏诊断信息的地方,通过.dmp文件你可以知道是什么引起系统蓝屏的。

5、可以删除c盘中的【Help】、【Backup】、【Temp】、【Download】文件夹。C盘是指电脑硬盘主分区之一,一般用于储存或安装系统使用。针对安装在本地硬盘的单操作系统来说,是默认的本地系统启动硬盘。

6、C盘中,一般而言,只要是自己下载的软件或是文件都可以进行删除,如果系统提示不能删除,可以在开机的时候按F8键进入到安全模式中,通过安全模式找到相应文件进行删除。

三、电脑c盘windows文件夹下minidump文件是什么

MiniDump:小存储器转储文件夹。\x0d\x0a小存储器转储文件记录可帮助确定计算机为什么意外停止的最小的有用信息集。此选项要求启动卷上有一个至少为 2 MB的页面文件。在运行 Microsoft Windows 2000或更高版本的计算机上,计算机每次意外停止时 Windows都会新建一个文件。这些文件的历史记录按照日期命名,存储在以下文件夹中如: C:\WINDOWS\Minidump\Mini010806-02.dmp。\x0d\x0a该转储文件类型包括以下信息:\x0d\x0a消息及其参数和其他数据;\x0d\x0aStop加载的驱动程序的列表;\x0d\x0a已停止的处理器的上下文(PRCB);\x0d\x0a已停止的进程的信息和内核上下文(EPROCESS);\x0d\x0a已停止的进程的信息和内核上下文(ETHREAD);\x0d\x0a已停止的线程的内核模式调用堆栈。\x0d\x0a当硬盘空间有限时,小存储器转储文件十分有用。但是,由于包括的信息有限,因此,通过分析此文件,可能无法发现并非由正在运行的线程在出现问题时直接导致的错误。\x0d\x0a用于读取小存储器转储文件的工具:\x0d\x0a可以使用转储检查实用工具(Dumpchk.exe)加载小存储器转储文件,还可以使用 Dumpchk.exe验证是否正确创建了存储器转储文件。转储检查实用工具不要求访问调试符号。Microsoft Windows 2000支持工具和 Microsoft Windows XP支持工具中包含有转储检查实用工具。

END,本文到此结束,如果可以帮助到大家,还望关注本站哦!