浏览代码

V2.3.5
1、添加了生成dump文件的功能

Apple 2 周之前
父节点
当前提交
eacf62f643
共有 3 个文件被更改,包括 52 次插入1 次删除
  1. 4 0
      TransmitterSwitch/transmitterswitch.cpp
  2. 5 0
      show1/CMakeLists.txt
  3. 43 1
      show1/main.cpp

+ 4 - 0
TransmitterSwitch/transmitterswitch.cpp

@@ -231,6 +231,10 @@ void TransmitterSwitch::getExecPlanFromEQM()
         LH_WRITE_ERROR("未初始化WebAPI");
         return;
     }
+
+    // delete m_fromWebAPI;
+    // m_fromWebAPI = nullptr;
+
     /* 判断是在线还是离线模式 */
     if(!GInfo.isOnlineDB())
     {

+ 5 - 0
show1/CMakeLists.txt

@@ -42,6 +42,11 @@ target_link_libraries(${execName1} PRIVATE
     ${spdlog_LIBRARY}
     
 )
+if(CMAKE_SYSTEM_NAME MATCHES "Windows")
+    target_link_libraries(${execName1} PRIVATE
+        DbgHelp
+    )
+endif()
 
 #连接stdc++fs库,如果编译器版本低于GCC9.0,则需要连接这个库
 #GCC9.0以上包含进了标准库

+ 43 - 1
show1/main.cpp

@@ -3,18 +3,60 @@
 #include <QFontDatabase>
 #include <QDebug>
 #include <QDialog>
-
+#include <QDateTime>
 
 #include "widget.h"
 #include "spdlog/spdlog.h"
 
+#ifdef Q_OS_WIN
+#include <windows.h>
+#include <dbghelp.h>
+#endif
+
 void addFont();
 
 
+#ifdef Q_OS_WIN
+// 异常处理函数
+LONG __stdcall ApplicationCrashHandler(EXCEPTION_POINTERS *pException)
+{
+    // 生成带时间戳的Dump文件名
+    QString dumpFileName = QString("crash_%1.dmp")
+        .arg(QDateTime::currentDateTime().toString(QStringLiteral("yyyyMMdd_hhmmss")));
+    // QString dumpFileName = QString("crash_%1.dmp").arg(QDateTime::currentDateTime().toString("yyyyMMdd_hhmmss"));
+
+    HANDLE hDumpFile = CreateFileW( (LPCWSTR)dumpFileName.utf16(), GENERIC_WRITE, 0, nullptr, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, nullptr);
+    if (hDumpFile != INVALID_HANDLE_VALUE) {
+        // 定义Dump信息
+        MINIDUMP_EXCEPTION_INFORMATION dumpInfo;
+        dumpInfo.ExceptionPointers = pException;
+        dumpInfo.ThreadId = GetCurrentThreadId();
+        dumpInfo.ClientPointers = TRUE;
+
+        // 写入Dump文件
+        MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(), hDumpFile, MiniDumpNormal, &dumpInfo, nullptr, nullptr);
+        CloseHandle(hDumpFile);
+    }
+
+    // 这里可以添加错误提示、保存日志等操作
+    // ...
+
+    return EXCEPTION_EXECUTE_HANDLER;
+}
+
+
+#endif
+
+
+
+
 int main(int argc, char *argv[])
 {
     
     QApplication app(argc, argv);
+#ifdef Q_OS_WIN
+    SetUnhandledExceptionFilter(ApplicationCrashHandler);
+#endif
     addFont();
 
     /* 设置日志输出等级 */