这里是否有任何带有install_default_signal_handlers()
函数的C库,它将为SIGSEGV和相关信号安装一些默认信号处理程序,其中信号处理程序将打印回溯?
信号处理程序以及信号处理程序的安装应该由库提供。
我认为backward-cpp适用于backward::SignalHandling sh;
的C ++。
还有Google Breakpad但这可能有点矫枉过正。
有libSegFault似乎可以做到这一点,但它似乎只在某些Unix(GlibC的一部分,并且有一个FreeBSD实现)上可用,而不是在MacOSX上。
一些相关的讨论是here,但这主要讨论了打印回溯的代码,但我搜索了一个为我提供信号处理程序的库。
答案 0 :(得分:0)
在任何* nix系统上都没有为SIGSEGV安装默认处理程序。但你可以1)自己安装一个,2)打印回溯和3)然后退出。
“退出”部分是必需的,因为某些信号从它们的处理程序(如果安装了一个)返回它是未定义; SIGSEGV
就是其中之一。
棘手的部分是(2) - 打印回溯。 Glibc provides 3 interfaces:backtrace
,backtrace_symbols
和backtrace_symbols_fd
。
您可以使用适合的任何一个并打印堆栈跟踪。
如果你不使用Glibc,那么你可能需要做更多的工作。例如,您可以使用在使用gcc(不一定是Glibc)的系统上可用的_Unwind_Backtrace
。