2

出现异常时需要创建转储文件。

不使用__try{...}and是否可以这样做__except(e){...}

有没有办法创建回调函数或注册等待系统崩溃的操作?

提前致谢。

4

4 回答 4

3

是的,您可以使用signal为特定信号注册回调,包括异常。

于 2012-04-24T13:08:40.457 回答
2

异常处理的基本功能是在发生错误时将控制权转移给异常处理程序,其中处理程序驻留在当前函数调用层次结构中较高的某个位置。标准 C 有一种机制来实现这一点:setjmp() 和 longjmp()。是两篇关于 C中异常处理的好文章。如果您使用 Microsoft Visual C,请查看try-except 语句,是 C 语言的扩展,它使应用程序能够在发生通常终止执行的事件时获得对程序的控制.

于 2012-04-24T14:48:52.043 回答
1

如果您想在 C 中实现自己的异常样式处理,则可以使用setjmp() 和朋友,但请注意这是黑魔法,如果您不小心的话,这是一种自取其辱的好方法。

对于其他错误,这取决于您所说的“异常”是什么意思。我可以认为您在调用库函数时表示错误(在这种情况下您应该适当地检查返回值)或 SEGV,在这种情况下您将获得一个 SIGSEGV 并且您的进程很快就会死掉。您可以编写一个信号处理程序来backtrace()为您提供线索,但仅此而已。

于 2012-04-24T13:16:14.473 回答
0

程序或系统崩溃通常不在 C 语言的范围内。您必须查看操作系统的设施以检测和处理此类事情(当然这取决于操作系统)。

对于一般意义上的“异常”,旧 C 语言中执行异常处理的典型习惯用法是 with goto. 您在 return 语句之后放置一个标签以充当“异常处理程序”,并且任何检测到异常条件goto的调用都是该标签。

于 2012-04-24T13:10:53.573 回答