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

我认为backward-cpp对于使用backward::SignalHandling sh;的C ++做到了。

也有Google Breakpad,但这可能是过大了。

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

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

最佳答案

在任何* nix系统上都没有为SIGSEGV安装默认处理程序。但是您可以1)自己安装一个,2)打印回溯记录,3)然后退出。
因为必须退出“退出”部分,因此对于某些信号,从其处理程序(如果已安装)中返回是不确定的; SIGSEGV是其中之一。

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

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

09-30 12:40
查看更多