我写的DMP文件 用WINDBUG 调试时为什么不能定位到代码
解决方案 »
- 定义一个类模板,同时重载了=号运算符,编译时出错,高手看下是什么原因
- 实现类似explorer的程序
- 哪里可以下载MSFlexGrid这个控件?
- 在view类中创建一CTreeCtrl ,如何才能给这个它添加onclick的响应了?
- ◆◆◆CSDN:为什么将2005年7月前的帖子都删除了???!!!◆◆◆
- 怎样在ListBox中贴图
- 200分向大家请教和讨论一下在WIN2000或WINXP下高速写文件的问题
- 请高人看一下,下列的代码是否正确(只有10分)
- 到底怎么才能让我的程序使用我自己导入的图标??!
- 如何将整数3转换成字符串指针char *类型???
- MFC ODBC连接数据库问题
- 请教:关于在VS2010下捕捉屏幕时不能捕捉VS2010的菜单问题,谢谢。
BOOL CALLBACK CErrorReport::MiniDumpCallback(PVOID CallbackParam,
PMINIDUMP_CALLBACK_INPUT CallbackInput,
PMINIDUMP_CALLBACK_OUTPUT CallbackOutput)
{
BOOL bRet = FALSE;
// Check parameters if( CallbackInput == 0 )
return FALSE; if( CallbackOutput == 0 )
return FALSE;
// Process the callbacks switch( CallbackInput->CallbackType )
{
case IncludeModuleCallback:
{
// Include the module into the dump
bRet = TRUE;
}
break; case IncludeThreadCallback:
{
// Include the thread into the dump
bRet = TRUE;
}
break; case ModuleCallback:
{
// Does the module have ModuleReferencedByMemory flag set ? if( !(CallbackOutput->ModuleWriteFlags & ModuleReferencedByMemory) )
{
// No, it does not - exclude it wprintf( L"Excluding module: %s \n", CallbackInput->Module.FullPath ); CallbackOutput->ModuleWriteFlags &= (~ModuleWriteModule);
} bRet = TRUE;
}
break; case ThreadCallback:
{
// Include all thread information into the minidump
bRet = TRUE;
}
break; case ThreadExCallback:
{
// Include this information
bRet = TRUE;
}
break; case MemoryCallback:
{
// We do not include any information here -> return FALSE
bRet = FALSE;
}
break; case CancelCallback:
break;
} return bRet;
}bool CErrorReport::CreateDumpFile(PEXCEPTION_POINTERS pe)
{
if(!pe)
{
MessageBox(NULL, _T("未捕获到异常"), _T("未捕获到异常"), MB_OK);
return false;
} HINSTANCE hDbgHelp = NULL;
HANDLE hFile = NULL;
MINIDUMP_EXCEPTION_INFORMATION mei;
MINIDUMP_CALLBACK_INFORMATION mci;
TCHAR dbgHelpDLLPath[255] = _T("E:\\code\\CrashRpt_v.1.2.6_r804\\bin\\dbghelp.dll");
TCHAR dumpFilePath[255] = _T("D:\\My Documents\\MINIDUMP.dmp");
hDbgHelp = LoadLibrary(_T("dbghelp.dll"));
if (hDbgHelp == NULL)
{
} hFile = CreateFile(dumpFilePath,
GENERIC_WRITE,
0,
NULL,
CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL,
NULL);
if(INVALID_HANDLE_VALUE == hFile)
{
MessageBox(NULL, _T("DUMP创建失败!"), _T("DUMP创建失败!"), MB_OK);
return false;
}
mei.ThreadId = GetCurrentThreadId();
cout<<mei.ThreadId<<endl;
cout<<GetCurrentProcessId()<<endl;
cin.get();
mei.ExceptionPointers = pe;
mei.ClientPointers = FALSE; mci.CallbackRoutine = MiniDumpCallback;
mci.CallbackParam = this;
MINIDUMP_TYPE mdt = (MINIDUMP_TYPE)(MiniDumpWithIndirectlyReferencedMemory | MiniDumpScanMemory | MiniDumpNormal); typedef BOOL (WINAPI *LPMINIDUMPWRITEDUMP)( HANDLE hProcess,
DWORD ProcessId,
HANDLE hFile,
MINIDUMP_TYPE DumpType,
CONST PMINIDUMP_EXCEPTION_INFORMATION ExceptionParam,
CONST PMINIDUMP_USER_STREAM_INFORMATION UserEncoderParam,
CONST PMINIDUMP_CALLBACK_INFORMATION CallbackParam); LPMINIDUMPWRITEDUMP pfnMiniDumpWriteDump =
(LPMINIDUMPWRITEDUMP)GetProcAddress(hDbgHelp, "MiniDumpWriteDump");
if(!pfnMiniDumpWriteDump)
{
MessageBox(NULL, _T("MDWD函数读取失败"), _T("MDWD函数读取失败"), MB_OK);
return false;
}
BOOL bWriteDump = pfnMiniDumpWriteDump(GetCurrentProcess(),
GetCurrentProcessId(),
hFile,
mdt,
&mei,
NULL,
&mci);
CloseHandle(hFile);
return true;
}