这里是否有任何具有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 interfaces:backtrace
,backtrace_symbols
和backtrace_symbols_fd
。
您可以使用任何合适的方法并打印堆栈跟踪。
如果您不使用Glibc,则可能需要做更多的工作。例如,您可以使用_Unwind_Backtrace
,它在使用gcc(不一定是Glibc)的系统上可用。