当前位置: 首页 > wzjs >正文

珠海响应式网站建设公司今天的新闻有哪些

珠海响应式网站建设公司,今天的新闻有哪些,专业网站营销,做运营必看的网站::SetUnhandledExceptionFilter(ExceptionFilter); 是 Windows 编程中用于设置顶层未处理异常过滤器的关键 API 调用。它属于 Windows 结构化异常处理(SEH, Structured Exception Handling)机制的一部分,主要用于捕获那些未被程序内部处理的异…

::SetUnhandledExceptionFilter(ExceptionFilter); 是 Windows 编程中用于设置顶层未处理异常过滤器的关键 API 调用。它属于 Windows 结构化异常处理(SEH, Structured Exception Handling)机制的一部分,主要用于捕获那些未被程序内部处理的异常(如内存访问违规、除零错误等)。以下是详细说明:

1.函数原型

LPTOP_LEVEL_EXCEPTION_FILTER SetUnhandledExceptionFilter(LPTOP_LEVEL_EXCEPTION_FILTER lpTopLevelExceptionFilter
);
  • 参数 lpTopLevelExceptionFilter:指向用户自定义的异常处理函数的指针。

  • 返回值:旧的顶层异常过滤器函数指针(可保存以便后续恢复)。

2.核心作用

2.1 全局异常捕获

当程序发生未处理的异常(如崩溃)时,系统会调用通过 SetUnhandledExceptionFilter 注册的异常处理函数,而不是弹出默认的 Windows 错误对话框(如“程序已停止工作”)。

2.2 自定义崩溃处理

开发者可以在自定义的 ExceptionFilter 函数中实现以下操作:

  • 记录崩溃信息(如调用栈、寄存器状态)。
  • 生成 MiniDump 文件(用于后续调试)。
  • 执行紧急数据保存或资源释放。
  • 上传错误报告到服务器。

3.参数 ExceptionFilter 的实现

自定义异常处理函数需符合以下签名:

LONG WINAPI ExceptionFilter(_EXCEPTION_POINTERS* pExceptionInfo);
  • 参数 pExceptionInfo:指向 EXCEPTION_POINTERS 结构体的指针,包含异常上下文和记录信息。
  • 返回值:
    • EXCEPTION_EXECUTE_HANDLER:系统终止程序。
    • EXCEPTION_CONTINUE_SEARCH:系统继续查找其他异常处理程序(如默认错误对话框)。
    • EXCEPTION_CONTINUE_EXECUTION:尝试恢复执行(通常不推荐,可能导致不稳定)。

4.典型使用场景

4.1 记录崩溃信息

#include <Windows.h>
#include <DbgHelp.h> // 需要链接 DbgHelp.lib// 自定义异常处理函数
LONG WINAPI MyExceptionFilter(_EXCEPTION_POINTERS* pExceptionInfo) {// 生成 MiniDump 文件HANDLE hFile = CreateFile(L"crash.dmp", GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);if (hFile != INVALID_HANDLE_VALUE) {MINIDUMP_EXCEPTION_INFORMATION dumpInfo = {0};dumpInfo.ThreadId = GetCurrentThreadId();dumpInfo.ExceptionPointers = pExceptionInfo;dumpInfo.ClientPointers = FALSE;MiniDumpWriteDump(GetCurrentProcess(),GetCurrentProcessId(),hFile,MiniDumpNormal,&dumpInfo,NULL,NULL);CloseHandle(hFile);}return EXCEPTION_EXECUTE_HANDLER; // 终止程序
}int main() {// 设置全局异常过滤器::SetUnhandledExceptionFilter(MyExceptionFilter);// 此处可能触发崩溃的代码(示例)int* p = nullptr;*p = 42; // 触发访问违规异常return 0;
}

4.2禁止默认错误对话框

某些场景下(如后台服务程序),需禁止弹出系统错误对话框:

// 返回 EXCEPTION_EXECUTE_HANDLER 直接终止程序,不弹窗
SetUnhandledExceptionFilter(MyExceptionFilter);

5.注意事项

5.1 多线程安全

SetUnhandledExceptionFilter 是进程全局的,需确保在程序初始化时设置一次,避免多线程竞争。

5.2 第三方库的覆盖

某些库(如某些 C++ 运行时、防病毒软件)可能会覆盖你的异常过滤器。可在关键位置(如主循环)重复设置。

5.3 异常处理函数的可靠性

  • 避免在 ExceptionFilter 中分配内存或调用复杂函数(程序可能已处于不稳定状态)。
  • 直接使用 Win32 API(如 WriteFile)而非 C/C++ 标准库函数(如 fprintf)。

5.4 与 C++ 异常的区别

  • SEH 处理的是系统级异常(如访问违规),而 try/catch 仅捕获 C++ 异常(如 throw 语句抛出的异常)。
  • 若需同时处理 C++ 异常,需结合 std::set_terminate 或其他机制。

5.5 64 位系统的差异

  • 在 64 位 Windows 中,某些异常(如非法指令)可能无法被捕获,需检查文档或使用 Vectored Exception Handling(AddVectoredExceptionHandler)。

6.替代方案

  • Vectored Exception Handling (VEH)
    通过 AddVectoredExceptionHandler 注册异常处理函数,可捕获所有异常(包括已处理的异常)。
  • C++ 信号处理
    使用 signal 函数处理特定信号(如 SIGSEGV),但功能较为有限。

7.完整示例:生成 MiniDump

#include <Windows.h>
#include <DbgHelp.h>
#pragma comment(lib, "DbgHelp.lib")LONG WINAPI MyExceptionFilter(_EXCEPTION_POINTERS* pExceptionInfo) {HANDLE hFile = CreateFile(L"CrashDump.dmp", GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);if (hFile != INVALID_HANDLE_VALUE) {MINIDUMP_EXCEPTION_INFORMATION dumpInfo = {0};dumpInfo.ThreadId = GetCurrentThreadId();dumpInfo.ExceptionPointers = pExceptionInfo;dumpInfo.ClientPointers = FALSE;MiniDumpWriteDump(GetCurrentProcess(),GetCurrentProcessId(),hFile,MiniDumpWithFullMemory, // 包含完整内存信息&dumpInfo,NULL,NULL);CloseHandle(hFile);}return EXCEPTION_EXECUTE_HANDLER;
}int main() {SetUnhandledExceptionFilter(MyExceptionFilter);// 触发崩溃的示例代码volatile int* p = nullptr;*p = 42;return 0;
}

8.总结

::SetUnhandledExceptionFilter(ExceptionFilter); 是 Windows 程序中捕获未处理异常的核心工具,常用于:

  • 生成崩溃转储文件(MiniDump)。
  • 记录错误日志。
  • 优雅终止程序。

使用时需注意异常处理函数的可靠性、线程安全性和潜在覆盖问题。对于复杂项目,建议结合 Vectored Exception Handling 或第三方崩溃报告库(如 Google Breakpad)。

http://www.dtcms.com/wzjs/349093.html

相关文章:

  • 给甜品网站做seo石家庄网络seo推广
  • 提供图片做网站的要求百度竞价运营
  • 福州网站建设效果网站优化公司排名
  • 快手直播间挂人气自助网站企业网站seo哪里好
  • 个人优秀网站浏览器下载安装2022最新版
  • 怎么做集合网站防晒霜营销软文
  • 哪个视频网站做视频最赚钱百度关键词排名怎么做
  • 瑞安市做网站百度搜索什么关键词能搜到网站
  • 巴青网站制作近期重大新闻事件10条
  • 小程序开发费用计入什么科目上海网站seo策划
  • 我自己做个网站怎么做网络营销课程大概学什么内容
  • 网站建设需要提供什么东西广州seo公司官网
  • 以学校为目标做网站策划书竞价恶意点击器
  • 做机加工的网站环球网疫情最新动态
  • 建设部网站一级开发资质盐城seo培训
  • 可以看网站的浏览器湖南长沙最新情况
  • 做外贸网站需要什么广告联盟全自动赚钱系统
  • 做视频网站视频源宁波seo网络推广优化价格
  • 屏山县龙华镇中心村建设招标网站网络销售的方法和技巧
  • 霸州网站建设小广告公司如何起步
  • 延安网站制作推广软文范例大全500
  • 江门做网站价格长春疫情最新消息
  • 清华紫光是可以做网站的吗企业培训
  • 网站制作 南通成人技术培训班有哪些种类
  • 免费推广软件手机版爱站网seo工具
  • 门户网站开发哪种语言比较好淘宝交易指数换算工具
  • 网站开发需要的工具seo网站外链工具
  • 互助平台网站制作网络营销推广外包服务
  • 商标怎么设计北京优化网站公司
  • 全网最低价业务网站国家免费职业培训平台