crashrpt3 开源项目的Vs 2022 C++20及其以上的编译

1. 首先从github 下载源代码 crashrpt3

2. 用CMake Gui 编译成vs studio 工程文件

2.1 点击 config 按钮在这里插入图片描述
2.2 依次点击 Generate 按钮、Open Project 按钮.之后vs 2022 会打开编译好的sln工程文件在这里插入图片描述

3.全选解决方案里面的所有项目,设置C++语言标准,我这里设置是最新C++,即启用的是C++23的标准

在这里插入图片描述 根据实际需要调整32位/64位和字符串集合
在这里插入图片描述

设置CrashRpt工程属性

在这里插入图片描述添加: /Zc:__cplusplus 选项,这个是解决 “__cplusplus 这个宏上,可以看到它的值展开为:199711L”

接着修改3个文件,因为C++20弃用了一些C++17的语法,导致编译失败,所以需要进行调整:

1. 修改CrashHandler.h 只有一处要修改

struct ThreadExceptionHandlers
{ThreadExceptionHandlers(){m_prevTerm = NULL;m_prevUnexp = NULL;m_prevSigFPE = NULL;m_prevSigILL = NULL;m_prevSigSEGV = NULL;}terminate_handler m_prevTerm;        // Previous terminate handler//unexpected_handler m_prevUnexp;   <-----这条语句修改为一下:
//  #if __cplusplus < 202002Lunexpected_handler m_prevUnexp;      // Previous unexpected handler (only for C++ versions < C++20)#elsestd::terminate_handler m_prevUnexp;  // Using terminate_handler as a substitute in C++20 and later
#endif
//  unexpected_handler m_prevUnexp;      // Previous unexpected handlervoid (__cdecl *m_prevSigFPE)(int);   // Previous FPE handlervoid (__cdecl *m_prevSigILL)(int);   // Previous SIGILL handlervoid (__cdecl *m_prevSigSEGV)(int);  // Previous illegal storage access handler
};

2.修改 CrashHandler.cpp 有两处要修改

int CCrashHandler::SetThreadExceptionHandlers(DWORD dwFlags)
{...//省略if(dwFlags&CR_INST_UNEXPECTED_HANDLER){// Catch unexpected() calls.// In a multithreaded environment, unexpected functions are maintained// separately for each thread. Each new thread needs to install its own// unexpected function. Thus, each thread is in charge of its own unexpected handling.// http://msdn.microsoft.com/en-us/library/h46t5b69.aspx//handlers.m_prevUnexp = set_unexpected(UnexpectedHandler);   <-----这条语句修改成以下:
/        
#if __cplusplus < 202002Lhandlers.m_prevUnexp = set_unexpected(UnexpectedHandler);
#elsehandlers.m_prevUnexp = std::set_terminate(UnexpectedHandler);
#endif
/               }
}int CCrashHandler::UnSetThreadExceptionHandlers()
{...//省略if(handlers->m_prevUnexp!=NULL){//set_unexpected(handlers->m_prevUnexp);  <-----这条语句修改成以下:
    
#if __cplusplus < 202002Lset_unexpected(handlers->m_prevUnexp);
#elseset_terminate(handlers->m_prevUnexp);
#endif
}
}

3.修改 CrashRpt.cpp 只有一处要修改

crEmulateCrash(unsigned ExceptionType) noexcept(false)
{
...//省略case CR_CPP_UNEXPECTED_CALL:{// Call unexpected// //   unexpected();  <-----这条语句修改成以下:    
// 
#if __cplusplus < 202002Lunexpected();
#elsestd::terminate();
#endif
//     }break;
}

修改完上述3个文件之后,工程就可以在C++20及其以上编译成功了.

修复一个使用中的bug:生成的crashrpt.xml和crashdump.dmp中的修改时间是UTC时间非本地时间

在 CrashSender工程里面的 ErrorReportSender.cpp
//crashdump.dmp的修改时间改成本地时间
BOOL CErrorReportSender::CreateMiniDump()
{...//省略
cleanup:
///change to local timeif (hFile != INVALID_HANDLE_VALUE) {SYSTEMTIME localTime;GetLocalTime(&localTime);  FILETIME ft;SystemTimeToFileTime(&localTime, &ft);          SetFileTime(hFile, &ft, &ft, &ft);}
/
<----------加上上述代码    // Close fileif(hFile)CloseHandle(hFile);
}
///crashrpt.xml 修改时间改成本地时间
void CErrorReportSender::AddElemToXML(CString sName, CString sValue, TiXmlNode* root)
{...//省略
cleanup://if(f)// fclose(f);//<---改为如下代码:
///if(f){fclose(f);HANDLE hFile = CreateFile(sFileName,GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);if (hFile != INVALID_HANDLE_VALUE){// Get the current local timeSYSTEMTIME localTime;GetLocalTime(&localTime);// Convert local time to FILETIMEFILETIME fileTime;SystemTimeToFileTime(&localTime, &fileTime);// Set the modification time of the fileSetFileTime(hFile, NULL, NULL, &fileTime);// Close the file handleCloseHandle(hFile);}}
//    
}

crashrpt3 提供了一些Demo可以先熟悉一下,再修改提交dump的对话框以及一些修改

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/448980.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【文档智能】文本文字识别、公式识别、表格文字识别核心算法及思路及实践-DBNet、CRNN、TrOCR

前言 OCR技术作为文档智能解析链路中的核心组件之一&#xff0c;贯穿整个技术链路&#xff0c;包括&#xff1a;文字识别、表格文字识别、公式识别&#xff0c;参看下面这张架构图&#xff1a; 前期介绍了很多关于文档智能解析相关核心技术及思路&#xff0c;本着连载的目的&a…

IT监控平台可视化:多维度展示助力运维效率提升

在信息化时代&#xff0c;IT设备的稳定性与业务的连续性紧密相连&#xff0c;任何细微的故障都可能给企业带来巨大的损失。因此&#xff0c;IT运维团队面临着前所未有的挑战&#xff0c;他们需要迅速、准确地识别和解决问题&#xff0c;以确保业务的平稳运行。而IT监控平台的可…

应届生毕业找不到工作转行IT需要做好哪些准备呢?

前言 相信这是很多即将毕业的应届生们都非常关心的问题。在这里&#xff0c;我们将站在一个应届生毕业且对IT行业感兴趣的角度&#xff0c;来探讨一下这个问题。 首先&#xff0c;我们先来了解一下什么是应届生。应届生是指在学校毕业之后&#xff0c;能够在当年或者下一年度…

AIGC验证码如何对抗,AIGC VS AIGC

AI类型的验证码&#xff0c;当然使用AI对对抗&#xff0c;使用大量的样本叠加训练&#xff0c;我的生成如下: 如果可以生词大量词汇&#xff0c;那么准确率必然上升&#xff0c;有办法的可以讨论

大模型系列:RAG技术深度解析

文末有福利&#xff01; RAG 是2023年最流行的基于 LLM 的应用系统架构。有许多产品几乎完全建立在 RAG 之上&#xff0c;覆盖了结合网络搜索引擎和 LLM 的问答服务&#xff0c;到成千上万个数据聊天的应用程序。很多人将RAG和Agent 作为大模型应用的两种主流架构&#xff0c;…

CTFHUB技能树之HTTP协议——响应包源代码

开启靶场&#xff0c;打开链接&#xff1a; 是个贪吃蛇小游戏&#xff0c;看不出来有什么特别的地方 用burp抓包看看情况&#xff1a; 嗯&#xff1f;点击“开始”没有抓取到报文&#xff0c;先看看网页源代码是什么情况 居然直接给出flag了&#xff0c;不知道这题的意义何在 …

pip离线下载和安装第三方库

pip离线下载和安装第三方库 离线下载离线安装 离线下载 下载依赖库&#xff08;.whl文件&#xff09;&#xff0c;比如下载polars库&#xff0c;并指定重清华源下载&#xff0c;会自动下载依赖的库&#xff0c;并保存到当前目录中&#xff0c;下载命令如下&#xff1a; # 下载…

Intel 新独显 Arc Battlemage 或于10月29日揭晓

原文转载修改自&#xff08;更多互联网新闻/搞机小知识&#xff09;&#xff1a; Arc Battlemage或于10月29日揭晓 英特尔入局独显市场也好几年了&#xff0c;虽然开局声势和跑分都挺猛&#xff0c;但市场表现不会说谎&#xff0c;上季度趋近于0的市场份额就是答案……不过&am…

字符串及正则表达式

目录 字符串 字符串常用方法&#xff1a; 格格式化字符串的三种方式&#xff1a; 格式化字符串的详细格式&#xff1a; 字符串的编码&#xff1a; 字符串的解码&#xff1a; 数据的验证&#xff1a; 字符串拼接的几种方式&#xff1a; 字符串去重&#xff1a; 正则表达…

notepad++中实现代码整体缩进和退格

我 | 在这里 ⭐ 全栈开发攻城狮、全网10W粉丝、2022博客之星后端领域Top1、专家博主。 &#x1f393;擅长 指导毕设 | 论文指导 | 系统开发 | 毕业答辩 | 系统讲解等。已指导60位同学顺利毕业 ✈️个人公众号&#xff1a;乡下小哥编程。回复 Java全套视频教程 或 前端全套视频教…

【网易云音乐】--源代码分享

最近写了一个网易云音乐的音乐实现部分&#xff0c;是通过JavaScript和jQuery实现的&#xff0c;具体效果大家可以参照下面的视频 源代码分享 - git地址: 网易云音乐源代码 下面将着重讲解一下音乐实现部分 视频有点模糊&#xff0c;不好意思&#xff0c;在b站上添加视频的时候…

CSS进阶-布局(一)

1、文本溢出 <style>.d1 {width: 400px;height: 300px;background-color: antiquewhite;/* 超出部分色设置为可见&#xff0c;默认方式 *//* overflow: visible; *//* 超出部分使用滚动条 *//* overflow: scroll; *//* 如果内容未超出元素则正常显示&#xff0c;超出元素…

免费企业邮箱哪个好:全面对比与推荐烽火!

免费企业邮箱哪个好用&#xff1f;推荐的免费企业邮箱有哪些&#xff1f; 面对市场上众多的免费企业邮箱服务&#xff0c;企业该如何选择&#xff1f;烽火将深入探讨免费企业邮箱哪个好这一问题&#xff0c;通过全面对比与推荐&#xff0c;帮助企业找到最适合自己的邮箱服务。…

OpenCV高级图形用户界面(15)注册一个回调函数来处理鼠标事件的函数setMouseCallback()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 为指定的窗口设置鼠标处理器。 setMouseCallback 是 OpenCV 中的一个功能&#xff0c;允许开发者注册一个回调函数来处理鼠标事件。当用户在窗口…

【前端】如何制作一个自己的网页(6)

接上文 网络中的图片 我们也可以在百度等网站搜索自己喜欢的图片。 此时对图片点击右键&#xff0c;选择【复制图片地址】&#xff0c;即可获得该图片的网络地址。 其实在HTML中&#xff0c;除了图片以外&#xff0c;我们还可以利用地址找到另一个网页。 如右图所示&#…

【Linux】理解文件系统与软硬链接,观察inode号理解<“软链接是包含路径的新文件“,“硬链接是关于文件名的机制“>,最终明白<什么是真正删除一个文件>

前言 大家好吖&#xff0c;欢迎来到 YY 滴Linux系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过C的老铁 主要内容含&#xff1a; 欢迎订阅 YY滴C专栏&#xff01;更多干货持续更新&#xff01;以下是传送门&#xff01; YY的《C》专栏YY的《C11》专栏YY的《Lin…

ComfyUI一键更换服装:IP-Adapter V2 + FaceDetailer(DeepFashion)

在这篇文章中&#xff0c;我们将探索如何使用新版的IP-Adapter和ComfyUI软件为人物进行换装。 整个过程非常简单&#xff0c;仅需要两张图片&#xff1a;一张服装图片和一张人物图片。 通过一系列节点的操作&#xff0c;ComfyUI就会把这个服装换到人物身上&#xff0c;并利用…

【DS】哈希表,哈希桶的实现

目录 哈希概念哈希冲突哈希函数负载因子哈希冲突的解决闭散列开散列 哈希表闭散列的实现哈希表的结构哈希函数构造函数查找插入删除 哈希表开散列的实现哈希表的结构查找插入删除 哈希表的表长建议是素数 平衡二叉树的学习中&#xff0c;学习及模拟实现了AVL树和红黑树&#xf…

python+selenium工具UI自动化全功能介绍(包括工具本身及配合RobotFramework框架和pytest框架应用)

文章较长&#xff0c;各位志同道合的朋友们&#xff0c;感谢关注收藏。 书山有路勤为径&#xff0c;学海无涯苦作舟。 ——韩愈&#xff0c;以山川学海比喻学习的艰辛与努力的方向。 明天的我们&#xff0c;必将会感谢昨日的自己。 1 UI自动化测试 UI自动化测试&#xff08…

长三角月度10m植被指数(NDVI) 数据集(2019-2023年)

长三角月度10m植被指数&#xff08;NDVI) 数据集&#xff08;2019-2023年&#xff09; 数据介绍 植被指数数据是区域可持续研究的重要参考指标。长江三角洲地区是我国发展最快的城市群之一&#xff0c;环境容量在城市建设的过程中被挤压&#xff0c;生态压力逐年增大。归一化植…