Add minidump helper class files
git-svn-id: svn://svn.tuxfamily.org/svnroot/notepadplus/repository@407 f5eea248-9336-0410-98b8-ebc06183d4e3
This commit is contained in:
parent
8dcd31a77d
commit
c889934a2d
|
@ -0,0 +1,82 @@
|
||||||
|
#include "MiniDumper.h"
|
||||||
|
#include "Common.h"
|
||||||
|
#include <shlwapi.h>
|
||||||
|
|
||||||
|
LPCTSTR msgTitle = TEXT("Notepad++ crash analysis");
|
||||||
|
|
||||||
|
MiniDumper::MiniDumper()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
bool MiniDumper::writeDump(EXCEPTION_POINTERS * pExceptionInfo)
|
||||||
|
{
|
||||||
|
TCHAR szDumpPath[MAX_PATH];
|
||||||
|
TCHAR szScratch[MAX_PATH];
|
||||||
|
LPCTSTR szResult = NULL;
|
||||||
|
bool retval = false;
|
||||||
|
|
||||||
|
HMODULE hDll = ::LoadLibrary( TEXT("DBGHELP.DLL") ); //that wont work on older windows version than XP, #care :)
|
||||||
|
|
||||||
|
if (hDll)
|
||||||
|
{
|
||||||
|
MINIDUMPWRITEDUMP pDump = (MINIDUMPWRITEDUMP)::GetProcAddress( hDll, "MiniDumpWriteDump" );
|
||||||
|
if (pDump)
|
||||||
|
{
|
||||||
|
//lstrcpy(szDumpPath, TEXT("C:\\N++RECOV\\NppDump.dmp"));
|
||||||
|
::GetModuleFileName(NULL, szDumpPath, MAX_PATH);
|
||||||
|
::PathRemoveFileSpec(szDumpPath);
|
||||||
|
lstrcat(szDumpPath, TEXT("\\NppDump.dmp"));
|
||||||
|
|
||||||
|
// ask the user if they want to save a dump file
|
||||||
|
int msgret = ::MessageBox(NULL, TEXT("Do you want to save a dump file?\r\nDoing so can aid in developing Notepad++."), msgTitle, MB_YESNO);
|
||||||
|
if (msgret == IDYES)
|
||||||
|
{
|
||||||
|
// create the file
|
||||||
|
HANDLE hFile = ::CreateFile( szDumpPath, GENERIC_WRITE, FILE_SHARE_WRITE, NULL, CREATE_ALWAYS,
|
||||||
|
FILE_ATTRIBUTE_NORMAL, NULL );
|
||||||
|
|
||||||
|
if (hFile!=INVALID_HANDLE_VALUE)
|
||||||
|
{
|
||||||
|
_MINIDUMP_EXCEPTION_INFORMATION ExInfo;
|
||||||
|
|
||||||
|
ExInfo.ThreadId = ::GetCurrentThreadId();
|
||||||
|
ExInfo.ExceptionPointers = pExceptionInfo;
|
||||||
|
ExInfo.ClientPointers = NULL;
|
||||||
|
|
||||||
|
// write the dump
|
||||||
|
BOOL bOK = pDump( GetCurrentProcess(), GetCurrentProcessId(), hFile, MiniDumpNormal, &ExInfo, NULL, NULL );
|
||||||
|
if (bOK)
|
||||||
|
{
|
||||||
|
wsprintf( szScratch, TEXT("Saved dump file to '%s'"), szDumpPath );
|
||||||
|
szResult = szScratch;
|
||||||
|
retval = true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
wsprintf( szScratch, TEXT("Failed to save dump file to '%s' (error %d)"), szDumpPath, GetLastError() );
|
||||||
|
szResult = szScratch;
|
||||||
|
}
|
||||||
|
::CloseHandle(hFile);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
wsprintf( szScratch, TEXT("Failed to create dump file '%s' (error %d)"), szDumpPath, GetLastError() );
|
||||||
|
szResult = szScratch;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
szResult = TEXT("The debugging DLL is outdated,\r\nfind a recent copy of dbghelp.dll and install it.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
szResult = TEXT("Unable to load the debugging DLL,\r\nfind a recent copy of dbghelp.dll and install it.");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (szResult)
|
||||||
|
printMsg(szResult, msgTitle);
|
||||||
|
|
||||||
|
return retval;
|
||||||
|
}
|
|
@ -0,0 +1,22 @@
|
||||||
|
//Adapted from http://www.codeproject.com/KB/debug/postmortemdebug_standalone1.aspx#_Reading_a_Minidump_with%20Visual%20Stud
|
||||||
|
//Modified for use by Npp
|
||||||
|
#ifndef MDUMP_H
|
||||||
|
#define MDUMP_H
|
||||||
|
|
||||||
|
#include <windows.h>
|
||||||
|
#include "dbghelp.h"
|
||||||
|
|
||||||
|
// based on dbghelp.h
|
||||||
|
typedef BOOL (WINAPI *MINIDUMPWRITEDUMP)(HANDLE hProcess, DWORD dwPid, HANDLE hFile, MINIDUMP_TYPE DumpType,
|
||||||
|
const PMINIDUMP_EXCEPTION_INFORMATION ExceptionParam,
|
||||||
|
const PMINIDUMP_USER_STREAM_INFORMATION UserStreamParam,
|
||||||
|
const PMINIDUMP_CALLBACK_INFORMATION CallbackParam
|
||||||
|
);
|
||||||
|
|
||||||
|
class MiniDumper {
|
||||||
|
public:
|
||||||
|
MiniDumper();
|
||||||
|
bool writeDump(EXCEPTION_POINTERS * pExceptionInfo);
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif //MDUMP_H
|
Loading…
Reference in New Issue