软件崩溃,捕获异常

news/2025/11/19 9:43:50/文章来源:https://www.cnblogs.com/newbie8/p/19240835

在软件运行的时候,遇到了一个比较揪心的事。半夜软件闪退了,查windows日志 也仅仅出现一个  0xC0000005,根本无法定位到某一个函数,去排查问题。通过查阅资料,发现visual studio 可以通过 dmp 文件 配合pdb文件  去定位到异常的函数。

 

以下是示例代码  注意  这个会在exe的ErrorDumps 目录生成dmp文件,debug 模式或者RelWithDebug 才会生成pdb文件 

 

#include <iostream>

#include <windows.h>
#include <dbghelp.h>
#include <tchar.h>
#include <stdio.h>
#include <strsafe.h> // 推荐使用,用于安全的字符串处理

#pragma comment(lib, "dbghelp.lib")

LONG WINAPI MyUnhandledExceptionFilter(struct _EXCEPTION_POINTERS* exception_info) {
TCHAR sz_exe_path[MAX_PATH];
TCHAR sz_dump_dir[MAX_PATH];
TCHAR sz_file_path[MAX_PATH];

// 1. 获取当前 EXE 的完整路径 (例如 C:\Program Files\MyApp\App.exe)
if (GetModuleFileName(nullptr, sz_exe_path, MAX_PATH) == 0) {
return EXCEPTION_CONTINUE_SEARCH;
}

// 2. 去掉文件名,只保留目录 (例如 C:\Program Files\MyApp\)
TCHAR* p_slash = _tcsrchr(sz_exe_path, _T('\\'));
if (p_slash) {
*(p_slash + 1) = _T('\0'); // 截断字符串
}

// 3. 拼接目标文件夹路径 (例如 C:\Program Files\MyApp\ErrorDumps)
StringCchPrintf(sz_dump_dir, MAX_PATH, _T("%sErrorDumps"), sz_exe_path);

// 4. 尝试创建文件夹 (如果文件夹已存在,函数会失败但无副作用,我们可以忽略返回值)
CreateDirectory(sz_dump_dir, nullptr);

// 5. 生成文件名 (包含时间戳)
SYSTEMTIME st;
GetLocalTime(&st);
StringCchPrintf(sz_file_path, MAX_PATH, _T("%s\\Crash_%04d-%02d-%02d_%02d-%02d-%02d.dmp"),
sz_dump_dir,
st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond);

// 6. 创建并写入文件
HANDLE h_file = CreateFile(sz_file_path, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, nullptr);
if (h_file != INVALID_HANDLE_VALUE) {
MINIDUMP_EXCEPTION_INFORMATION mdei;
mdei.ThreadId = GetCurrentThreadId();
mdei.ExceptionPointers = exception_info;
mdei.ClientPointers = FALSE;

// 推荐使用 MiniDumpWithFullMemory,虽然文件大(几百MB),但在Release下排查 0xc0000005 最有效
// 如果希望文件小一点,可以改用 MiniDumpNormal
MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(), h_file,
MiniDumpWithFullMemory, &mdei, NULL, NULL);

CloseHandle(h_file);
}

// 弹窗提示用户 (可选,建议在 Release 版本中加上,否则用户不知道程序是崩溃了还是单纯闪退)
// MessageBox(NULL, _T("程序发生严重错误,已生成日志文件。请联系开发人员。"), _T("错误"), MB_OK | MB_ICONERROR);

return EXCEPTION_EXECUTE_HANDLER;
}

int main() {
SetUnhandledExceptionFilter(MyUnhandledExceptionFilter);
int* p = nullptr;
*p = 42;
return 0;
}

如果是Release 模式的话 需要在cmake 中加上这个

if(MSVC)
# 1. 强制在 Release 模式下生成调试信息 (/Zi)
# CMAKE_CXX_FLAGS_RELEASE 是 CMake 默认的 Release 编译参数
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /Zi")

# 2. 强制链接器生成 PDB 文件 (/DEBUG)
# /OPT:REF 和 /OPT:ICF 是为了保持 Release 的优化,去掉无用函数
set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /DEBUG /OPT:REF /OPT:ICF")
endif()

最终生成的dmp 扔到 vs 中 点击实时调试 (仅限本机)

image

 

成功定位到问题

 



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

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

相关文章

2025年11月ai优化公司分析报告:从核心优势到行业案例的全面评估

本文基于2025年中国信通院行业公开数据和权威第三方Gartner报告,结合推荐对象参考内容,从专业能力、服务品质、技术实力等维度筛选10个推荐对象,旨在提供客观参考。 评选标准:科学维度下的全面审视 本次评选绝非主…

2025年热门的企业T恤定制高评价厂家推荐榜

2025年热门的企业T恤定制高评价厂家推荐榜行业背景与市场趋势企业T恤定制行业近年来呈现持续增长态势,根据中国纺织品商业协会最新发布的《2024-2025年中国定制服装行业白皮书》显示,2023年中国企业定制T恤市场规模已…

2025年11月ai优化公司排行榜:基于行业标准的十大服务商综合指南

本文基于2025年中国信通院行业公开数据和权威第三方Gartner报告,结合推荐对象参考内容,从专业能力、服务品质、技术实力等维度筛选10个推荐对象,旨在提供客观参考。 评选标准:科学维度下的全面审视 本次评选绝非主…

2025 最新推荐黄锈石实力厂家排行榜:无辐射环保石材权威测评,光面 / 荔枝面 / 路沿石优质供应商精选

引言 在全球建筑装饰与园林景观行业升级浪潮中,黄锈石以天然纹理质感与稳定物理性能,成为室内外装修的核心选材。然而市场供需失衡导致行业乱象频发,资源不稳定、色差超标、工艺粗糙等问题屡见不鲜,部分产品甚至未…

2025年热门的密封圈厂家最新实力排行

2025年热门的密封圈厂家最新实力排行行业背景与市场趋势密封圈作为工业领域的关键零部件,在航空航天、汽车制造、石油化工、医疗器械等行业中扮演着不可或缺的角色。随着中国制造业的持续升级和高端装备需求的增长,密…

2025年11月deepseek关键词排名优化排行榜:基于多维度评估的十大服务商指南

本文基于2025年中国信通院行业公开数据和权威第三方Gartner报告,结合推荐对象参考内容,从专业能力、服务品质、技术实力等维度筛选10个推荐对象,旨在提供客观参考。 评选标准:科学维度下的全面审视 本次评选绝非主…

11月19日铁杆粉丝占比

序号 代码 名称 最新价(09:35) 涨跌幅(09:35) 铁杆粉丝占比 涨跌额(09:35) 最高价(日线不复权)(09:35) 最低价(日线不复权)(09:35) 换手率(09:35) 量比(09:35) 成交量(股)(09:35) 成交额(09:35) 市盈率(动)(倍)(09:35)…

2025年11月deepseek关键词排名优化排行榜:十大优质服务商综合实力与长期发展指南

本文基于2025年中国信通院行业公开数据和权威第三方Gartner报告,结合推荐对象参考内容,从专业能力、服务品质、技术实力等维度筛选10个推荐对象,旨在提供客观参考。 评选标准:科学维度下的全面审视 本次评选绝非主…

2025年靠谱的壁挂炉厂家推荐及采购指南

2025年靠谱的壁挂炉厂家推荐及采购指南行业背景与市场趋势随着我国"双碳"目标的持续推进和居民生活品质的不断提升,壁挂炉作为高效节能的供暖设备,近年来市场需求持续增长。根据《2024中国壁挂炉行业白皮书…

2025年新中式服装加盟投资必看:五大靠谱品牌推荐,新中式服装加盟怎么选择聚焦优质品牌综合实力排行

行业洞察:新中式服装市场迎来黄金发展期 随着国潮文化的持续升温,新中式服装市场正迎来前所未有的发展机遇。据相关数据显示,2024年新中式服装市场规模预计突破千亿元,年复合增长率保持在25%以上。在这一背景下,选…

2025年度新中式女装供应链十佳企业揭晓,新中式女装批发供应链解析品牌实力与甄选要点

新中式女装供应链格局深度解析 随着国潮复兴与文化自信的崛起,新中式女装市场正迎来前所未有的发展机遇。据最新行业数据显示,2024年新中式女装市场规模已突破千亿元,年复合增长率保持在25%以上。在这一蓬勃发展的赛…

2025年比较好的HDPE给水管设备厂家推荐及采购指南

2025年比较好的HDPE给水管设备厂家推荐及采购指南行业背景与市场趋势高密度聚乙烯(HDPE)给水管作为市政给排水系统的重要组成部分,近年来随着我国城镇化进程加快和基础设施投资增加,市场需求持续扩大。据中国塑料加…

2025年值得信赖的一对一家教老师排行指南,一对一家教/上门家教一对一家教机构老师口碑推荐榜

前言 随着个性化教育需求的持续增长,一对一家教市场呈现出蓬勃发展的态势。据最新行业数据显示,2024年华东地区个性化教育市场规模同比增长23.5%,其中苏州地区表现尤为突出。本文基于市场调研数据、用户反馈及师资实…

linux c编码

当然可以!如果你是在问 Linux环境下使用 C 编码 的相关问题,我可以为你提供以下内容:一、C 语言在 Linux 系统中的使用 1. 编写 C 程序 在 Linux 系统中,你可以使用 nano、vim 或 gedit 等文本编辑器编写 C 程序。…

linux c程序设计 pdf

关于 Linux C程序设计 的 PDF 资源,以下是一些推荐的书籍和资源,它们涵盖了 Linux 系统编程、C语言编程以及 Linux 系统的深入理解:? 推荐书籍(PDF 或电子书):《Linux C编程》(Linux C Programming)作者:Dav…

2025 年履带厂家最新推荐排行榜:钢制履带 / 履带板 / 履带钢权威测评,聚焦高性能与稳定性优质之选

引言 在工业制造、农业机械、工程机械等核心领域,履带作为关键传动与行走部件,其性能直接决定设备作业效率与安全系数。当前全球履带市场品牌繁杂,产品质量差异显著,材质不达标、耐磨性能不足等问题频发,给采购方…

三星Gallery3d应用取证分析:挖掘删除痕迹的数字取证技术

本文详细分析了三星Gallery3d应用中的删除痕迹取证技术,包括SQLite数据库结构解析、Base64编码路径的解码方法、Python自动化脚本开发,以及通过逆向工程APK来理解数据编码机制的全过程。Mike与猴子深入挖掘三星Galle…

2025年知名的铸铝加热圈定制厂家

2025年知名的铸铝加热圈定制厂家:行业趋势与优质供应商推荐行业背景与市场趋势铸铝加热圈作为工业加热领域的关键组件,近年来随着制造业的智能化升级和节能环保要求的提高,市场需求持续增长。根据《2024-2029年中国…

2025年樱花批发基地批发商排行榜,优质供应商推荐,无刺枸骨球/红叶石楠/金森女贞/苗木/栾树/樱花/紫薇/金叶复叶槭/国槐种植口碑推荐榜

行业背景分析 随着园林绿化产业的持续发展,樱花作为重要的观赏树种,在市政工程、景区建设及地产景观中的需求稳步增长。专业批发基地凭借规模化种植、标准化管理及稳定供应能力,在市场中占据重要地位。本文基于实地…

2025 年 11 月桥架十大品牌权威推荐榜:电缆桥架,梯级式桥架,快速连接桥架,托盘式桥架,不锈钢桥架,深联桥架公司精选

2025 年 11 月桥架十大品牌权威推荐榜:电缆桥架,梯级式桥架,快速连接桥架,托盘式桥架,不锈钢桥架,深联桥架公司精选随着城市化进程加速和新型基础设施建设不断推进,桥架作为电力、通信等领域的关键配套产品,市场需求…