wordpress   发布时间:2022-04-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了如何在Windows上为C中的访问冲突错误安装信号处理程序?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

我有一个错误的应用程序在 Windows上引发访问冲突.这会弹出Windows上的“崩溃对话框”,我不希望它出现在用户的计算机上.在 Linux上,我会为SIGSEGV安装一个信号处理程序,只在sighandler函数中安装exit(),但我在Windows上,而且我对Windows API几乎一无所知. 据我所知,当发生段错误时,Windows会抛出异常ACCESS_VIOLATION.我认为这
@H_450_6@
@H_450_6@
@H_502_0@
@H_502_0@
我有一个错误的应用程序在 Windows上引发访问冲突.这会弹出Windows上的“崩溃对话框”,我不希望它出现在用户的计算机上.在 @L_675_7@上,我会为SIGSEGV安装一个信号处理程序,只在sighandler函数中安装exit(),但我在Windows上,而且我对Windows API几乎一无所知.

据我所知,当发生段错误时,Windows会抛出异常ACCESS_VIOLATION.我认为这是一个常规的C异常并且可以捕获它,但我需要修补的程序是C,而不是C.如何在Windows上安装“信号处理程序”? (假设信号的概念存在,虑到signal()和朋友是POSIX API)? this API是作为核心API实现的,还是POSIX兼容层的一部分,可能不会出现在vanilla部署中?

我在Win7上使用VS2008

解决方法

这不是一个“常规C异常”.这是一个操作系统陷阱.

在Linux和其他类Unix系统上,OS陷阱被称为“信号”.

在Windows上,它们被称为“结构化异常”.你会在网上找到关于SEH的信息,它代表结构化异常处理.官方文档是on MSDN

Windows C和C编译器具有用于处理结构化异常的特殊关键字

__try {
}
__except( MyExceptionFilter(GetExceptionCode(),GetExceptionInfo()) ) {
}

在异常过滤器中,您可以检查异常代码并区分访问冲突,除以零,浮点信号等.您可以找出异常发生的位置并记录堆栈跟踪(有一些额外的工作).您可以选择是否运行处理程序代码块.

在下面,这些关键字被转换为使用向量异常处理程序表之类的数据结构设置陷阱处理程序的代码.但是你真的想要编译器的帮助而不是自己动手.看到内部实现只是编译器开发人员感兴趣的,或者如果出现问题,您必须通过它进行调试.

1根据您的编译选项,在Visual C中它是/ EHa和/ EHs选项,C异常可能建立在SEH之上(有一个特殊的异常代码,意思是“MIcrosoft C异常”),指向C异常对象的指针是存储在SEH参数中).当发生这种情况时,C try / catch和SEH __try / __的堆栈展开除了/ __ finally是统一的 – 两个异常都通过两种处理程序样式展开.对于在同一程序中同时使用C异常和SEH的人来说,__ set_se_translator函数也很有趣.

大佬总结

以上是大佬教程为你收集整理的如何在Windows上为C中的访问冲突错误安装信号处理程序?全部内容,希望文章能够帮你解决如何在Windows上为C中的访问冲突错误安装信号处理程序?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
猜你在找的wordpress相关文章