﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-Glife</title><link>http://www.cppblog.com/Glife/</link><description /><language>zh-cn</language><lastBuildDate>Tue, 09 Jun 2026 17:40:52 GMT</lastBuildDate><pubDate>Tue, 09 Jun 2026 17:40:52 GMT</pubDate><ttl>60</ttl><item><title>《转》让程序在崩溃时体面的退出之Dump文件</title><link>http://www.cppblog.com/Glife/archive/2011/11/17/160318.html</link><dc:creator>Glife</dc:creator><author>Glife</author><pubDate>Thu, 17 Nov 2011 02:50:00 GMT</pubDate><guid>http://www.cppblog.com/Glife/archive/2011/11/17/160318.html</guid><wfw:comment>http://www.cppblog.com/Glife/comments/160318.html</wfw:comment><comments>http://www.cppblog.com/Glife/archive/2011/11/17/160318.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Glife/comments/commentRss/160318.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Glife/services/trackbacks/160318.html</trackback:ping><description><![CDATA[<span class="Apple-style-span" style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff; ">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;在我的那篇《<a href="http://blog.csdn.net/starlee/article/details/6618849" style="color: #336699; text-decoration: none; ">让程序在崩溃时体面的退出之CallStack</a>》中提供了一个在程序崩溃时得到CallStack的方法。可是要想得到CallStack，必须有pdb文件的支持。但是一般情况下，发布出去的程序都是Release版本的，都不会附带pdb文件。那么我们怎么能在程序崩溃的时候找到出错的具体位置呢？这个时候就该Dump文件出场了！Dump文件是进程的内存镜像，可以把程序运行时的状态完整的保存下来。&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 要想在程序崩溃的时候创建Dump文件，就需要用到DbgHelp.dll中Windows API的MiniDumpWriteDump()函数。该函数声明如下：<br /><div class="dp-highlighter bg_cpp" style="width: 687px; "><div class="bar"><div class="tools"><a href="http://blog.csdn.net/starlee/article/details/6630816#" class="ViewSource" title="view plain" style="background-image: url(http://static.blog.csdn.net/scripts/SyntaxHighlighter/styles/images/default/ico_plain.gif); border-width: initial; border-color: initial; padding-top: 1px; padding-right: 1px; padding-bottom: 1px; padding-left: 1px; display: inline-block; width: 16px; height: 16px; text-indent: -2000px; background-position: 0% 0%; background-repeat: no-repeat no-repeat; ">view plain</a></div></div><ol start="1" class="dp-cpp" style="border-width: initial; border-color: initial; "><li class="alt" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; "><span class="datatypes" style="border-width: initial; border-color: initial; color: #2e8b57; font-weight: bold; ">BOOL</span><span style="border-width: initial; border-color: initial; ">&nbsp;WINAPI&nbsp;MiniDumpWriteDump(&nbsp;&nbsp;</span></span></li><li class="" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; ">&nbsp;&nbsp;__in&nbsp;&nbsp;<span class="datatypes" style="border-width: initial; border-color: initial; color: #2e8b57; font-weight: bold; ">HANDLE</span><span style="border-width: initial; border-color: initial; ">&nbsp;hProcess,&nbsp;&nbsp;</span></span></li><li class="alt" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; ">&nbsp;&nbsp;__in&nbsp;&nbsp;<span class="datatypes" style="border-width: initial; border-color: initial; color: #2e8b57; font-weight: bold; ">DWORD</span><span style="border-width: initial; border-color: initial; ">&nbsp;ProcessId,&nbsp;&nbsp;</span></span></li><li class="" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; ">&nbsp;&nbsp;__in&nbsp;&nbsp;<span class="datatypes" style="border-width: initial; border-color: initial; color: #2e8b57; font-weight: bold; ">HANDLE</span><span style="border-width: initial; border-color: initial; ">&nbsp;hFile,&nbsp;&nbsp;</span></span></li><li class="alt" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; ">&nbsp;&nbsp;__in&nbsp;&nbsp;MINIDUMP_TYPE&nbsp;DumpType,&nbsp;&nbsp;</span></li><li class="" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; ">&nbsp;&nbsp;__in&nbsp;&nbsp;PMINIDUMP_EXCEPTION_INFORMATION&nbsp;ExceptionParam,&nbsp;&nbsp;</span></li><li class="alt" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; ">&nbsp;&nbsp;__in&nbsp;&nbsp;PMINIDUMP_USER_STREAM_INFORMATION&nbsp;UserStreamParam,&nbsp;&nbsp;</span></li><li class="" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; ">&nbsp;&nbsp;__in&nbsp;&nbsp;PMINIDUMP_CALLBACK_INFORMATION&nbsp;CallbackParam&nbsp;&nbsp;</span></li><li class="alt" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; ">);&nbsp;&nbsp;</span></li></ol></div><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 具体的参数和返回值的解释可以查找MSDN，有很详细的说明。下面依然用上一篇文章中的例子代码来说明怎么在程序崩溃的时候创建Dump文件。</p><div class="dp-highlighter bg_cpp" style="width: 687px; "><div class="bar"><div class="tools"><a href="http://blog.csdn.net/starlee/article/details/6630816#" class="ViewSource" title="view plain" style="background-image: url(http://static.blog.csdn.net/scripts/SyntaxHighlighter/styles/images/default/ico_plain.gif); border-width: initial; border-color: initial; padding-top: 1px; padding-right: 1px; padding-bottom: 1px; padding-left: 1px; display: inline-block; width: 16px; height: 16px; text-indent: -2000px; background-position: 0% 0%; background-repeat: no-repeat no-repeat; ">view plain</a></div></div><ol start="1" class="dp-cpp" style="border-width: initial; border-color: initial; "><li class="alt" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; "><span class="comment" style="border-width: initial; border-color: initial; ">//&nbsp;处理Unhandled&nbsp;Exception的回调函数</span><span style="border-width: initial; border-color: initial; ">&nbsp;&nbsp;</span></span></li><li class="" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; "><span class="comment" style="border-width: initial; border-color: initial; ">//</span><span style="border-width: initial; border-color: initial; ">&nbsp;&nbsp;</span></span></li><li class="alt" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; "><span class="datatypes" style="border-width: initial; border-color: initial; color: #2e8b57; font-weight: bold; ">LONG</span><span style="border-width: initial; border-color: initial; ">&nbsp;ApplicationCrashHandler(EXCEPTION_POINTERS&nbsp;*pException)&nbsp;&nbsp;</span></span></li><li class="" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; ">{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li><li class="alt" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; ">&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment" style="border-width: initial; border-color: initial; ">//&nbsp;这里弹出一个错误对话框并退出程序</span><span style="border-width: initial; border-color: initial; ">&nbsp;&nbsp;</span></span></li><li class="" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; ">&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment" style="border-width: initial; border-color: initial; ">//</span><span style="border-width: initial; border-color: initial; ">&nbsp;&nbsp;</span></span></li><li class="alt" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; ">&nbsp;&nbsp;&nbsp;&nbsp;FatalAppExit(-1,&nbsp;&nbsp;_T(<span class="string" style="border-width: initial; border-color: initial; ">"***&nbsp;Unhandled&nbsp;Exception!&nbsp;***"</span><span style="border-width: initial; border-color: initial; ">));&nbsp;&nbsp;</span></span></li><li class="" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; ">&nbsp;&nbsp;</span></li><li class="alt" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; ">&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword" style="border-width: initial; border-color: initial; ">return</span><span style="border-width: initial; border-color: initial; ">&nbsp;EXCEPTION_EXECUTE_HANDLER;&nbsp;&nbsp;</span></span></li><li class="" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; ">}&nbsp;&nbsp;</span></li><li class="alt" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; ">&nbsp;&nbsp;</span></li><li class="" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; "><span class="comment" style="border-width: initial; border-color: initial; ">//&nbsp;一个有函数调用的类</span><span style="border-width: initial; border-color: initial; ">&nbsp;&nbsp;</span></span></li><li class="alt" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; "><span class="comment" style="border-width: initial; border-color: initial; ">//&nbsp;</span><span style="border-width: initial; border-color: initial; ">&nbsp;&nbsp;</span></span></li><li class="" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; "><span class="keyword" style="border-width: initial; border-color: initial; ">class</span><span style="border-width: initial; border-color: initial; ">&nbsp;CrashTest&nbsp;&nbsp;</span></span></li><li class="alt" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; ">{&nbsp;&nbsp;</span></li><li class="" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; "><span class="keyword" style="border-width: initial; border-color: initial; ">public</span><span style="border-width: initial; border-color: initial; ">:&nbsp;&nbsp;</span></span></li><li class="alt" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; ">&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword" style="border-width: initial; border-color: initial; ">void</span><span style="border-width: initial; border-color: initial; ">&nbsp;Test()&nbsp;&nbsp;&nbsp;</span></span></li><li class="" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; ">&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;</span></li><li class="alt" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Crash();&nbsp;&nbsp;&nbsp;</span></li><li class="" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; ">&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li><li class="alt" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; ">&nbsp;&nbsp;</span></li><li class="" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; "><span class="keyword" style="border-width: initial; border-color: initial; ">private</span><span style="border-width: initial; border-color: initial; ">:&nbsp;&nbsp;</span></span></li><li class="alt" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; ">&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword" style="border-width: initial; border-color: initial; ">void</span><span style="border-width: initial; border-color: initial; ">&nbsp;Crash()&nbsp;&nbsp;&nbsp;</span></span></li><li class="" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; ">&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;</span></li><li class="alt" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment" style="border-width: initial; border-color: initial; ">//&nbsp;除零，人为的使程序崩溃</span><span style="border-width: initial; border-color: initial; ">&nbsp;&nbsp;</span></span></li><li class="" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment" style="border-width: initial; border-color: initial; ">//</span><span style="border-width: initial; border-color: initial; ">&nbsp;&nbsp;</span></span></li><li class="alt" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="datatypes" style="border-width: initial; border-color: initial; color: #2e8b57; font-weight: bold; ">int</span><span style="border-width: initial; border-color: initial; ">&nbsp;i&nbsp;=&nbsp;13;&nbsp;&nbsp;</span></span></li><li class="" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="datatypes" style="border-width: initial; border-color: initial; color: #2e8b57; font-weight: bold; ">int</span><span style="border-width: initial; border-color: initial; ">&nbsp;j&nbsp;=&nbsp;0;&nbsp;&nbsp;</span></span></li><li class="alt" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="datatypes" style="border-width: initial; border-color: initial; color: #2e8b57; font-weight: bold; ">int</span><span style="border-width: initial; border-color: initial; ">&nbsp;m&nbsp;=&nbsp;i&nbsp;/&nbsp;j;&nbsp;&nbsp;</span></span></li><li class="" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; ">&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li><li class="alt" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; ">};&nbsp;&nbsp;</span></li><li class="" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; ">&nbsp;&nbsp;</span></li><li class="alt" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; "><span class="datatypes" style="border-width: initial; border-color: initial; color: #2e8b57; font-weight: bold; ">int</span><span style="border-width: initial; border-color: initial; ">&nbsp;_tmain(</span><span class="datatypes" style="border-width: initial; border-color: initial; color: #2e8b57; font-weight: bold; ">int</span><span style="border-width: initial; border-color: initial; ">&nbsp;argc,&nbsp;_TCHAR*&nbsp;argv[])&nbsp;&nbsp;</span></span></li><li class="" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; ">{&nbsp;&nbsp;</span></li><li class="alt" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; ">&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment" style="border-width: initial; border-color: initial; ">//&nbsp;设置处理Unhandled&nbsp;Exception的回调函数</span><span style="border-width: initial; border-color: initial; ">&nbsp;&nbsp;</span></span></li><li class="" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; ">&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment" style="border-width: initial; border-color: initial; ">//&nbsp;</span><span style="border-width: initial; border-color: initial; ">&nbsp;&nbsp;</span></span></li><li class="alt" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; ">&nbsp;&nbsp;&nbsp;&nbsp;SetUnhandledExceptionFilter((LPTOP_LEVEL_EXCEPTION_FILTER)ApplicationCrashHandler);&nbsp;&nbsp;&nbsp;</span></li><li class="" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; ">&nbsp;&nbsp;</span></li><li class="alt" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; ">&nbsp;&nbsp;&nbsp;&nbsp;CrashTest&nbsp;test;&nbsp;&nbsp;</span></li><li class="" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; ">&nbsp;&nbsp;&nbsp;&nbsp;test.Test();&nbsp;&nbsp;</span></li><li class="alt" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; ">&nbsp;&nbsp;</span></li><li class="" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; ">&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword" style="border-width: initial; border-color: initial; ">return</span><span style="border-width: initial; border-color: initial; ">&nbsp;0;&nbsp;&nbsp;</span></span></li><li class="alt" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; ">}&nbsp;&nbsp;</span></li></ol></div><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在上面的程序崩溃的时候，会调用函数ApplicationCrashHandler()。创建Dump文件的代码就需要添加到该函数中。下面就是一个创建Dump文件的函数。</p><div class="dp-highlighter bg_cpp" style="width: 687px; "><div class="bar"><div class="tools"><a href="http://blog.csdn.net/starlee/article/details/6630816#" class="ViewSource" title="view plain" style="background-image: url(http://static.blog.csdn.net/scripts/SyntaxHighlighter/styles/images/default/ico_plain.gif); border-width: initial; border-color: initial; padding-top: 1px; padding-right: 1px; padding-bottom: 1px; padding-left: 1px; display: inline-block; width: 16px; height: 16px; text-indent: -2000px; background-position: 0% 0%; background-repeat: no-repeat no-repeat; ">view plain</a></div></div><ol start="1" class="dp-cpp" style="border-width: initial; border-color: initial; "><li class="alt" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; "><span class="comment" style="border-width: initial; border-color: initial; ">//&nbsp;创建Dump文件</span><span style="border-width: initial; border-color: initial; ">&nbsp;&nbsp;</span></span></li><li class="" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; "><span class="comment" style="border-width: initial; border-color: initial; ">//&nbsp;</span><span style="border-width: initial; border-color: initial; ">&nbsp;&nbsp;</span></span></li><li class="alt" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; "><span class="keyword" style="border-width: initial; border-color: initial; ">void</span><span style="border-width: initial; border-color: initial; ">&nbsp;CreateDumpFile(</span><span class="datatypes" style="border-width: initial; border-color: initial; color: #2e8b57; font-weight: bold; ">LPCWSTR</span><span style="border-width: initial; border-color: initial; ">&nbsp;lpstrDumpFilePathName,&nbsp;EXCEPTION_POINTERS&nbsp;*pException)&nbsp;&nbsp;</span></span></li><li class="" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; ">{&nbsp;&nbsp;</span></li><li class="alt" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; ">&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment" style="border-width: initial; border-color: initial; ">//&nbsp;创建Dump文件</span><span style="border-width: initial; border-color: initial; ">&nbsp;&nbsp;</span></span></li><li class="" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; ">&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment" style="border-width: initial; border-color: initial; ">//</span><span style="border-width: initial; border-color: initial; ">&nbsp;&nbsp;</span></span></li><li class="alt" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; ">&nbsp;&nbsp;&nbsp;&nbsp;<span class="datatypes" style="border-width: initial; border-color: initial; color: #2e8b57; font-weight: bold; ">HANDLE</span><span style="border-width: initial; border-color: initial; ">&nbsp;hDumpFile&nbsp;=&nbsp;CreateFile(lpstrDumpFilePathName,&nbsp;GENERIC_WRITE,&nbsp;0,&nbsp;NULL,&nbsp;CREATE_ALWAYS,&nbsp;FILE_ATTRIBUTE_NORMAL,&nbsp;NULL);&nbsp;&nbsp;</span></span></li><li class="" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; ">&nbsp;&nbsp;</span></li><li class="alt" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; ">&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment" style="border-width: initial; border-color: initial; ">//&nbsp;Dump信息</span><span style="border-width: initial; border-color: initial; ">&nbsp;&nbsp;</span></span></li><li class="" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; ">&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment" style="border-width: initial; border-color: initial; ">//</span><span style="border-width: initial; border-color: initial; ">&nbsp;&nbsp;</span></span></li><li class="alt" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; ">&nbsp;&nbsp;&nbsp;&nbsp;MINIDUMP_EXCEPTION_INFORMATION&nbsp;dumpInfo;&nbsp;&nbsp;</span></li><li class="" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; ">&nbsp;&nbsp;&nbsp;&nbsp;dumpInfo.ExceptionPointers&nbsp;=&nbsp;pException;&nbsp;&nbsp;</span></li><li class="alt" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; ">&nbsp;&nbsp;&nbsp;&nbsp;dumpInfo.ThreadId&nbsp;=&nbsp;GetCurrentThreadId();&nbsp;&nbsp;</span></li><li class="" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; ">&nbsp;&nbsp;&nbsp;&nbsp;dumpInfo.ClientPointers&nbsp;=&nbsp;TRUE;&nbsp;&nbsp;</span></li><li class="alt" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; ">&nbsp;&nbsp;</span></li><li class="" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; ">&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment" style="border-width: initial; border-color: initial; ">//&nbsp;写入Dump文件内容</span><span style="border-width: initial; border-color: initial; ">&nbsp;&nbsp;</span></span></li><li class="alt" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; ">&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment" style="border-width: initial; border-color: initial; ">//</span><span style="border-width: initial; border-color: initial; ">&nbsp;&nbsp;</span></span></li><li class="" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; ">&nbsp;&nbsp;&nbsp;&nbsp;MiniDumpWriteDump(GetCurrentProcess(),&nbsp;GetCurrentProcessId(),&nbsp;hDumpFile,&nbsp;MiniDumpNormal,&nbsp;&amp;dumpInfo,&nbsp;NULL,&nbsp;NULL);&nbsp;&nbsp;</span></li><li class="alt" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; ">&nbsp;&nbsp;</span></li><li class="" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; ">&nbsp;&nbsp;&nbsp;&nbsp;CloseHandle(hDumpFile);&nbsp;&nbsp;</span></li><li class="alt" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; ">}&nbsp;&nbsp;</span></li></ol></div><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在函数ApplicationCrashHandler()用类似下面的代码来调用上面的函数，就可以在程序崩溃的时候创建Dump文件。</p><div class="dp-highlighter bg_cpp" style="width: 687px; "><div class="bar"><div class="tools"><a href="http://blog.csdn.net/starlee/article/details/6630816#" class="ViewSource" title="view plain" style="background-image: url(http://static.blog.csdn.net/scripts/SyntaxHighlighter/styles/images/default/ico_plain.gif); border-width: initial; border-color: initial; padding-top: 1px; padding-right: 1px; padding-bottom: 1px; padding-left: 1px; display: inline-block; width: 16px; height: 16px; text-indent: -2000px; background-position: 0% 0%; background-repeat: no-repeat no-repeat; ">view plain</a></div></div><ol start="1" class="dp-cpp" style="border-width: initial; border-color: initial; "><li class="alt" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; "><span style="border-width: initial; border-color: initial; ">CreateDumpFile(_T(</span><span class="string" style="border-width: initial; border-color: initial; ">"C:\\Test.dmp"</span><span style="border-width: initial; border-color: initial; ">),&nbsp;pException);&nbsp;&nbsp;</span></span></li></ol></div><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 下面简单说一下Dump文件的用法。将Dump文件拷贝到含有应用程序和对应的pdb文件的目录，在VS里面打开Dump文件（或者直接双击Dump文件），VS会自动创建一个Solution，直接调试运行，代码就会停到使程序崩溃的那一行上。就跟在VS里面调试代码一摸一样。（VS2008）</p><p><img alt="" src="http://hi.csdn.net/attachment/201107/25/0_1311558048Y8Ta.gif" style="border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; " /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在VS2010里打开Dump文件，会显示一个Minidump File Summary，并且可以进行下面图中的操作。</p></span>转自网络。<img src ="http://www.cppblog.com/Glife/aggbug/160318.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Glife/" target="_blank">Glife</a> 2011-11-17 10:50 <a href="http://www.cppblog.com/Glife/archive/2011/11/17/160318.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>