jld*_*ont 5 linux segmentation-fault
我知道,给予足够的情况下,人们可以希望建设性地使用(即恢复)从段错误条件.
但是,努力值得吗?如果是,在什么情况下?
Mar*_*rkR 15
你真的不希望从段错误中恢复过来.您可以检测到它发生了,并在可能的情况下转储相关的特定于应用程序的状态,但是您无法继续该过程.这是因为(其中包括)
因此,一般来说,捕获它并做任何事情都没有意义,除非以相当突然的方式终止进程.尝试将(重要)数据写回光盘或继续做其他有用的工作是没有意义的.将状态转储到日志(许多应用程序所做的)然后退出是有一定意义的.
一个可能有用的事情可能是exec()你自己的进程,或者有一个看门狗进程,在崩溃的情况下重启它.(注意:如果你的进程有> 1个线程,exec并不总是有明确定义的行为)
Chr*_*uin 13
原因如下:
如果您知道分段错误不是错误,那么可以通过捕获分段错误来实现非常先进的技术.例如,您可以保护页面,以便您无法从页面中读取,然后在读取完成之前捕获SIGSEGV以执行"神奇"行为.(请参阅TomaszWęgrzanowski"Segfaulting自己的程序,以获得乐趣和利润",作为您可能做的事情的一个例子,但通常开销很高,因此不值得这样做.)
类似的原则适用于捕获捕获非法指令异常(通常在内核中)以模拟未在处理器上实现的指令.