在没有try-catch机制的情况下捕获纯C上的异常

时间:2012-04-24 13:06:26

标签: c exception-handling callback crash-dumps

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

是否可以在不使用__try{...}__except(e){...}的情况下执行此操作?

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

提前致谢。

4 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

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

答案 2 :(得分:1)

如果你想在C中实现你自己的异常风格处理,那就有setjmp() and friends,但要注意这是黑魔法,如果你不小心的话,这是一种很好的射击方法。

对于其他错误,它取决于“异常”的含义。我可以认为你或者在调用库函数时意味着一个错误(在这种情况下你应该适当地检查返回值)或者一个SEGV,在这种情况下你将获得一个SIGSEGV并且你的进程之后不久就死去了。您可以编写一个信号处理程序来使用backtrace()来提供线索,但不会多于此。

答案 3 :(得分:0)

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

对于一般意义上的“异常”,旧C中执行异常处理的典型习惯是使用goto。你将一个标签放在你的return语句之后作为“异常处理程序”,以及任何检测到该标签的异常条件goto的调用。