dump文件的生成及的分析
一、使用程序自動生成dump文件。在程序運行崩潰時,會自動生成到程序運行目錄。添加以下。
#include <DbgHelp.h>
#pragma comment(lib, "dbghelp.lib")//注意:動態庫dbghelp.dll也要加入到運行目錄下。
LONG __stdcall ExceptCallBack(EXCEPTION_POINTERS *pExcPointer)
{
char szFileName[1024] = { 0 };
GetModuleFileName(NULL, szFileName, sizeof(szFileName));
string strFilePath(szFileName);
int pos = strFilePath.find_last_of('\\', strFilePath.length());
string strDir = strFilePath.substr(0, pos + 1); ? ? ? ? ? ? ? ? ? ? ? // 獲取文件夾路徑
int suffixPos = strFilePath.find_last_of(".", strFilePath.length());
string strFile = strFilePath.substr(pos + 1, suffixPos - pos - 1); ? ? // 文件名稱
string strDmpfile = strDir.append(strFile).append(".dmp"); ? ? ? ? ? ?// 配置文件路徑
string erromsg = "程序崩潰!相關信息記錄在:" + strDmpfile;
MessageBox(NULL, erromsg.c_str(), NULL, MB_OK);
//創建dump文件
HANDLE hFile = CreateFile(strDmpfile.c_str(), GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
//向文件寫下當前程序崩潰相關信息
MINIDUMP_EXCEPTION_INFORMATION loExceptionInfo;
loExceptionInfo.ExceptionPointers = pExcPointer;
loExceptionInfo.ThreadId = GetCurrentThreadId();
loExceptionInfo.ClientPointers = TRUE;
MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(), hFile, (MiniDumpNormal), &loExceptionInfo, NULL, NULL);
CloseHandle(hFile);
return EXCEPTION_EXECUTE_HANDLER;
}
int main(int argc, char* argv[])
{ ?
//main開始,注冊生成dump回調
SetUnhandledExceptionFilter(ExceptCallBack);
????????...
}
二、然后將對應版本的pdb文件和dump文件放到同一個文件夾內。用windbg.exe 加載“Open crash Dump”.
加載后,輸入命令:“.ecxr” ?來顯示錯誤上下文
?????????????????“ kb ?” ? 來顯示調用堆棧
即可定位問題行數。
或者用 ? ? ? ? ? ?!analyze -v 來自動分析
轉載于:https://blog.51cto.com/danielllf/1609304
總結
以上是生活随笔為你收集整理的dump文件的生成及的分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: juggle dsl语法介绍及codeg
- 下一篇: Linux下添加PATH环境变量