出现异常时需要创建转储文件。
不使用__try{...}
and是否可以这样做__except(e){...}
?
有没有办法创建回调函数或注册等待系统崩溃的操作?
提前致谢。
出现异常时需要创建转储文件。
不使用__try{...}
and是否可以这样做__except(e){...}
?
有没有办法创建回调函数或注册等待系统崩溃的操作?
提前致谢。
是的,您可以使用signal
为特定信号注册回调,包括异常。
异常处理的基本功能是在发生错误时将控制权转移给异常处理程序,其中处理程序驻留在当前函数调用层次结构中较高的某个位置。标准 C 有一种机制来实现这一点:setjmp() 和 longjmp()。这是两篇关于 C中异常处理的好文章。如果您使用 Microsoft Visual C,请查看try-except 语句,它是 C 语言的扩展,它使应用程序能够在发生通常终止执行的事件时获得对程序的控制.
如果您想在 C 中实现自己的异常样式处理,则可以使用setjmp() 和朋友,但请注意这是黑魔法,如果您不小心的话,这是一种自取其辱的好方法。
对于其他错误,这取决于您所说的“异常”是什么意思。我可以认为您在调用库函数时表示错误(在这种情况下您应该适当地检查返回值)或 SEGV,在这种情况下您将获得一个 SIGSEGV 并且您的进程很快就会死掉。您可以编写一个信号处理程序来backtrace()
为您提供线索,但仅此而已。
程序或系统崩溃通常不在 C 语言的范围内。您必须查看操作系统的设施以检测和处理此类事情(当然这取决于操作系统)。
对于一般意义上的“异常”,旧 C 语言中执行异常处理的典型习惯用法是 with goto
. 您在 return 语句之后放置一个标签以充当“异常处理程序”,并且任何检测到异常条件goto
的调用都是该标签。