用于为SIGSEGV安装标准信号处理程序的通用C库

时间:2017-01-18 10:04:06

标签: c sigsegv backtrace signal-handling

这里是否有任何带有install_default_signal_handlers()函数的C库,它将为SIGSEGV和相关信号安装一些默认信号处理程序,其中信号处理程序将打印回溯? 信号处理程序以及信号处理程序的安装应该由库提供。

我认为backward-cpp适用于backward::SignalHandling sh;的C ++。

还有Google Breakpad但这可能有点矫枉过正。

libSegFault似乎可以做到这一点,但它似乎只在某些Unix(GlibC的一部分,并且有一个FreeBSD实现)上可用,而不是在MacOSX上。

一些相关的讨论是here,但这主要讨论了打印回溯的代码,但我搜索了一个为我提供信号处理程序的库。

1 个答案:

答案 0 :(得分:0)

在任何* nix系统上都没有为SIGSEGV安装默认处理程序。但你可以1)自己安装一个,2)打印回溯和3)然后退出。 “退出”部分是必需的,因为某些信号从它们的处理程序(如果安装了一个)返回它是未定义; SIGSEGV就是其中之一。

棘手的部分是(2) - 打印回溯。 Glibc provides 3 interfacesbacktracebacktrace_symbolsbacktrace_symbols_fd。 您可以使用适合的任何一个并打印堆栈跟踪。

如果你使用Glibc,那么你可能需要做更多的工作。例如,您可以使用在使用gcc(不一定是Glibc)的系统上可用的_Unwind_Backtrace