开发者

windows 下C++生成Dump调试文件与分析

目录
  • 1、前言
  • 2、依赖库下载
  • 3、项目配置
    • 3.1、设置输出路径
    • 3.2、拷贝依赖资源
    • 3.3 将dbghelp.h添加在工程中
    • 3.4、配置lib文件路径
    • 3.5、添加生成minidump文件方法
  • 4、测试效果
    • 5、打开dump文件进行定位

      1、前言

      dump文件是C++程序发生异常时,保存当时程序运行状态的文件,是调试异常程序重要的方法,所以程序崩溃时,除了日志文件,dump文件便成了我们查找错误的最后一根救命的稻草。

      2、依赖库下载

      生成dump需要有Dbghelp的库,正常来说VS、qt都自带了。如果没有,私信我发你。

      3、项目配置

      3.1、设置输出路径

      步骤:右击项目-》属性-》配置属性-》常规 -》输出路径

      windows 下C++生成Dump调试文件与分析

      设置一个固定的输出路径,是为了方便存放deghelp.dll动态库。

      windows 下C++生成Dump调试文件与分析

      3.2、拷贝依赖资源

      1、将头文件拷贝至和main.cpp同级。

      windows 下C++生成Dump调试文件与分析

      2、将dbghelp.lib静态库、dbghelp.dll动态库拷贝至输出目录下(如果没有输出目录,请先运行一遍程序即可)

      windows 下C++生成Dump调试文件与分析

      3.3 将dbghelp.h添加在工程中

      步骤:右击头文件目录-》点击添加-》现有项

      windows 下C++生成Dump调试文件与分析

      3.4、配置lib文件路径

      步骤:右击项目-》属性-》配置属性-》链接器 -》输入-》附加依赖项 输入dbghelp.lib

      windows 下C++生成Dump调试文件与分析

      3.5、添加生成minidump文件方法

      在main.cpp中添加MyUnhandledExceptionFilter方法。然后在main函数的开头添加SetUnhandledExceptionFilter(MyUnhandledExceptionFilter);代码。

      #include <Windows.h>
      #include <Dbghelp.h>
      
      LONG WINAPI MyUnhandledExceptionFilter(struct _EXCEPTION_POINTERS* ExceptionInfo)
      {
          HANDLE lhDumpFile = CreateFile(L".\\bin_D\\miniDumpFile.dmp", GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
      
          MINIDUMP_EXCEPTION_INFORMATION loExandroidceptionInfo;
      
          loExceptionInfo.ExceptionPointers = ExceptionInfo;
      
          loExceptionInfo.ThreadId = GetCurrentThreadId();
      
          loExceptionInfo.ClientPointers = TRUE;
      
          MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(), lhDumpFile, MiniDumpNormal, &loExceptionInphpfo, NULLwww.devze.com, NULL);
      
          CloseHandle(lhDumpFile);
      
          return EXCEPTION_EXECUTE_HANDLER开发者_JS开发;
      }
      int main()
      {
          SetUnhandledExceptionFilter(MyUnhandledExceptionFilter);
      
          //....
      
      	return 0;
      }
      
      

      4、测试效果

      在main中添加下面的代码,然后运行,将会在工作路径下看到phpminiDumpFile.dmp文件

      int test(int a, int b)
      {
          return a / b;
      }
      
      int main()
      {
          SetUnhandledExceptionjsFilter(MyUnhandledExceptionFilter);
      
          int a = 1;
          int b = 0;
      
          std::cout << test(a, b) << std::endl;
          //....
      
      	return 0;
      }

      见下图。

      windows 下C++生成Dump调试文件与分析

      5、打开dump文件进行定位

      有VS的情况下,可以直接双击xx.dmp文件。然后点击右侧的【仅限本机调试】

      windows 下C++生成Dump调试文件与分析

      然后我们就可以看到程序崩溃的位置,这时我们还可以查看堆栈、内存的信息。加快排查错误。

      windows 下C++生成Dump调试文件与分析

      到此这篇关于windows 下C++生成Dump调试文件与分析的文章就介绍到这了,更多相关C++生成Dump调试文件内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

      0

      上一篇:

      下一篇:

      精彩评论

      暂无评论...
      验证码 换一张
      取 消

      最新开发

      开发排行榜