windows server dump文件
2021-04-09 06:28
                         标签:图片   tar   反馈   .lib   except   param   ...   std   技术    1. mini dump:  ***** 需要包含 dbghelp.dll 库  ****mini_dump.h文件: // reference:https://msdn.microsoft.com/zh-cn/library/windows/desktop/ee416349(v=vs.85).aspx #endif // mini_dump_h__ mini_dump.cpp文件: #include "mini_dump.h" #include  #include  // Is dbghelp.h dbghelp.lib dbghelp.dll windows build-in? // Visual Studio 2005 compatible  namespace minidump     std::string* app_version = 0;     // "c:\folder1\xxx.exe" to "c:\folder1\"     // Generage dump file to avoid file name collisions         char file_name[MAX_PATH];         snprintf(file_name, MAX_PATH, "%s%s-%04d%02d%02d-%02d%02d%02d-%ld-%ld.dmp",         return file_name;     // Generate dump file whole name in GetModuleFileName()‘s directory         std::string path = GetDirectory(file_path);         path += "dump\\";         std::string file_mark = GetDumpFileMark();         path += file_mark;         return path;     MINIDUMP_EXCEPTION_INFORMATION GetExpParam(EXCEPTION_POINTERS* exception_pointers)     int GenerateDump(EXCEPTION_POINTERS* exception_pointers)         // The "\dump" whole directory         CreateDirectory(dump_file_dir.c_str(), NULL);         HANDLE dump_file_handle = CreateFile(dump_file_name.c_str(),          MINIDUMP_EXCEPTION_INFORMATION exp_param =          MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(),          return 0;     LONG _stdcall GolbalExceptionHandler(EXCEPTION_POINTERS* exception_pointers)     void IntiializeMemory()     void MiniDumpBegin(const char* app_name, const char* app_version)         *minidump::app_name = app_name;         SetUnhandledExceptionFilter(GolbalExceptionHandler); 使用方法,在main函数开始出,调用:MiniDumpBegin函数,如图:    2. 使用注册表:    opendump.bat文件:----写注册表 @echo off   closedump.bat 文件--- 删注册表 @echo off   使用方法:    程序出现崩溃,C:\ 会出现: CrashDump 文件    3. 调试dump文件 参考链接https://blog.csdn.net/tojohnonly/article/details/72864694   双击打开生成的 Dump 文件 , 会默认用 VS2012 打开并自动创建一个解决方案 , Dump 摘要信息如下 : 一定要确保  有时从客户那里反馈回来的 Dump 文件程序路径和本地的不一致 , 需要将程序拷贝到 Dump 信息里面的路径中去 ;   调试文件需要对应的符号文件 , 我们需要设置符号文件对应的路径 : 在 Dump 信息摘要右上角 , 点击  推荐使用  在左侧的解决方案处右键点击    准备工作已就绪 , 现在在 Dump 文件摘要右上角点击  如果提示  程序会重现当时崩溃前的调用堆栈 , 如下图所示 : 可以看出程序已经定位到了崩溃前的那一行代码 , 非常方便排查 ;   4. 使用完成后,还原注册表,运行closedump.bat文件。   5. 删除 C盘下的 CrashDump 文件。   windows  server dump文件 标签:图片   tar   反馈   .lib   except   param   ...   std   技术    原文地址:https://www.cnblogs.com/20170722-kong/p/9067194.html
#ifndef mini_dump_h__
#define mini_dump_h__
namespace minidump
{
    void MiniDumpBegin(const char* app_name, const char* app_version);
}
#include 
#include 
#pragma comment (lib,"dbghelp.lib")
#define snprintf(buf,len, format,...) _snprintf_s(buf, len,len, format, __VA_ARGS__)
{
    // needn‘t delete
    std::string* app_name = 0;
    std::string GetDirectory(const std::string& execution)
    {
        std::string path("");
        size_t pos = execution.find_last_of("\\");
        if (pos != std::string::npos)
            path = execution.substr(0, pos + 1);
        return path;
    }
    std::string GetDumpFileMark()
    {
        SYSTEMTIME system_local_time;
        GetLocalTime(&system_local_time);
            app_name->c_str(), app_version->c_str(),
            system_local_time.wYear, system_local_time.wMonth, system_local_time.wDay,
            system_local_time.wHour, system_local_time.wMinute, system_local_time.wSecond,
            GetCurrentProcessId(), GetCurrentThreadId());
    }
    // Like: F:\reference\project\TestMiniDump\VsProject\build\Debug\dump\20161015-110026-8552-9344.dmp
    std::string GetDumpFileName()
    {
        char file_path[MAX_PATH];
        GetModuleFileName(NULL, file_path, MAX_PATH);
    }
    {
        MINIDUMP_EXCEPTION_INFORMATION exp_param;
        exp_param.ThreadId = GetCurrentThreadId();
        exp_param.ExceptionPointers = exception_pointers;
        exp_param.ClientPointers = TRUE;
        return exp_param;
    }
    {
        std::string dump_file_name = GetDumpFileName();
        std::string dump_file_dir = GetDirectory(dump_file_name);
            GENERIC_READ| GENERIC_WRITE, FILE_SHARE_WRITE | FILE_SHARE_READ,
             0, CREATE_ALWAYS, 0, 0);
            GetExpParam(exception_pointers);
            dump_file_handle, MiniDumpNormal, &exp_param, NULL, NULL);
    }
    {
        GenerateDump(exception_pointers);
        return EXCEPTION_EXECUTE_HANDLER;
    }
    {
        app_name = new std::string();
        app_version = new std::string();
    }
    {
        IntiializeMemory();
        *minidump::app_version = app_version;
    }
}
echo 正在启用Dump...
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps"
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps" /v DumpFolder /t REG_EXPAND_SZ /d "C:\CrashDump" /f
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps" /v DumpType /t REG_DWORD /d 2 /f
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps" /v DumpCount /t REG_DWORD /d 10 /f
echo Dump已经启用
pause
@echo on
echo 正在关闭Dump...
reg delete "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps" /f
echo Dump已经关闭
pause
@echo on
 2. 去打开服务 
 打开 Dump 文件

进程名称 对应的程序路径在本地存在 , 同时确保最初生成程序的对应 .pdb 符号文件也在当前目录 ; 设置 Symbols 路径
设置符号路径 :
Microsoft 符号服务器 , 但第一次在线下载会有点慢 ; 当然也可以自己下载符号集文件到某个路径 , 再讲符号路径指向该路径 :
 设置源码路径
属性 -> 调试源文件 , 将源代码的路径添加进来 , 注意一定是解决方案所在的路径(sln) :
调试 Dump 文件
使用 仅限本机 进行调试 :
无法找到调试信息 , 或者调试信息不匹配 , 无法查找或打开 PDB 文件 , 说明没有将最初生成程序的对应 .pdb 符号文件放在调试程序所在的目录 , 或者 .pdb 符号文件与当前的程序版本不匹配 ;
文章标题:windows server dump文件
文章链接:http://soscw.com/index.php/essay/73219.html