抛弃GdCpp*.dll/pdb历史重新建库。libhv和Sqlite的dll保留

This commit is contained in:
Zhang Jianjun
2026-02-02 16:09:02 +08:00
parent f148ca49e3
commit 4a2a284ac0
292 changed files with 350450 additions and 0 deletions

60
include/CreateDump.h Normal file
View File

@@ -0,0 +1,60 @@
#include <filesystem>
#include <windows.h>
#include <dbghelp.h>
#pragma comment(lib,"dbghelp.lib")
/// \brief 本模块在一个exe或dll中只需要执行一次直接include本文件到main、App或程序初始化模块中
/// 调用一次
/// 预先设置的dump文件路径
static wchar_t dumpFilePath[MAX_PATH] = { 0 };
/// 预先设置的创建dump文件方式
static MINIDUMP_TYPE dumpFlag = MiniDumpWithFullMemory;
static LONG applicationCrashHandler_CreateDump(EXCEPTION_POINTERS* pException)
{
time_t time_ = time(nullptr);
std::tm t;
localtime_s(&t, &time_);
size_t len = wcslen(dumpFilePath); //预设路径长度
_snwprintf_s(dumpFilePath + len, MAX_PATH - len, MAX_PATH - len, L"_%4.4d%2.2d%2.2d_%2.2d%2.2d%2.2d.dmp", t.tm_year + 1900, t.tm_mon + 1, t.tm_mday, t.tm_hour, t.tm_min, t.tm_sec);
// 创建Dump文件
HANDLE hDumpFile = CreateFile(dumpFilePath, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
// Dump信息
MINIDUMP_EXCEPTION_INFORMATION dumpInfo;
dumpInfo.ExceptionPointers = pException;
dumpInfo.ThreadId = GetCurrentThreadId();
dumpInfo.ClientPointers = TRUE;
// 写入Dump文件内容
MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(), hDumpFile, dumpFlag, &dumpInfo, NULL, NULL);
CloseHandle(hDumpFile);
return EXCEPTION_EXECUTE_HANDLER;
}
/// @brief 设置崩溃时创建dump
/// @param path 设置dump途径和文件名前缀。例如设置为L"D:\XYZ"则崩溃时创建的文件为D:\XYZ_<日期>_<时间>.dmp
/// @param flag 默认
static void setCreateDump(const wchar_t* path,
int flag = MiniDumpWithIndirectlyReferencedMemory | MiniDumpWithDataSegs | MiniDumpWithHandleData | MiniDumpWithThreadInfo)
{
dumpFlag = MINIDUMP_TYPE(flag);
//设置dump路径与exe路径相同增加日期时间启动程序的时间不是奔溃的时间关系不大
wcscpy_s(dumpFilePath, std::size(dumpFilePath), path);
SetUnhandledExceptionFilter(applicationCrashHandler_CreateDump);
}
/// @brief 测试崩溃是否能正常创建dump文件
static void TestDump()
{
char *p = 0;
*p = 1;
}