程序运行时,经常会有BUG,尤其是发布版出现BUG,常常不容易快速找到BUG位置,实时打印崩溃文件方便查找BUG
首先添加一个dumpfile.h头文件内容如下,文件出处点击进入
#pragma once #include <windows.h> #include <DbgHelp.h> #pragma comment(lib,"Dbghelp.lib") long __stdcall CrashInfocallback(_EXCEPTION_POINTERS *pexcp) { //创建 Dump 文件 HANDLE hDumpFile = ::CreateFile( L"Error.dmp", GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL ); if (hDumpFile != INVALID_HANDLE_VALUE) { //Dump信息 MINIDUMP_EXCEPTION_INFORMATION dumpInfo; dumpInfo.ExceptionPointers = pexcp; dumpInfo.ThreadId = GetCurrentThreadId(); dumpInfo.ClientPointers = TRUE; //写入Dump文件内容 ::MiniDumpWriteDump( GetCurrentProcess(), GetCurrentProcessId(), hDumpFile, MiniDumpNormal, &dumpInfo, NULL, NULL ); } return 0; }
然后在main.cpp引用调用就可以了
记得编译Release发布版的时候修改VS项目属性,设置生成PDB文件
如果运行软件出现崩溃,软件目录下会生成Error.dmp文件,双击用VS打开即可,记得先设置符号路径,加入QT库的PDB文件路径,安装QT时用在线安装器勾选Qt Debug Information Files就是PDB文件,设置好符号路径后使用本机进行调试
如果发生QT库中断时,这时会找不到QT源码文件,打开项目解决方案资源管理器,右键项目属性,调试源文件加入QT的源码路径,然后返回点继续调试就会跳转到QT源码崩溃位置