我需要在出现异常时创建转储文件。
是否可以在不使用__try{...}
和__except(e){...}
的情况下执行此操作?
有没有办法创建回调函数或注册等待系统崩溃的操作?
提前致谢。
答案 0 :(得分:3)
是的,您可以使用signal
注册特定信号的回调,包括例外。
答案 1 :(得分:2)
异常处理的基本功能是在发生错误时将控制转移到异常处理程序,其中处理程序位于当前函数调用层次结构中较高的位置。标准C有一个实现此目的的机制:setjmp()和longjmp()。 This和this是两篇关于C中异常处理的好文章。如果您使用Microsoft Visual C,请查看try-except statement C语言的扩展,使应用程序能够获得对当正常终止执行的事件发生时的程序。
答案 2 :(得分:1)
如果你想在C中实现你自己的异常风格处理,那就有setjmp() and friends,但要注意这是黑魔法,如果你不小心的话,这是一种很好的射击方法。
对于其他错误,它取决于“异常”的含义。我可以认为你或者在调用库函数时意味着一个错误(在这种情况下你应该适当地检查返回值)或者一个SEGV,在这种情况下你将获得一个SIGSEGV并且你的进程将之后不久就死去了。您可以编写一个信号处理程序来使用backtrace()
来提供线索,但不会多于此。
答案 3 :(得分:0)
程序或系统崩溃通常不在C的视图之内。您必须查看操作系统的设施以检测和处理此类事情(当然这将取决于操作系统)。
对于一般意义上的“异常”,旧C中执行异常处理的典型习惯是使用goto
。你将一个标签放在你的return语句之后作为“异常处理程序”,以及任何检测到该标签的异常条件goto
的调用。