Linux C和C++;:在处理像SIGSEGV这样的信号时,我还应该记录什么? 工作在一些Linux(Ubuntu)系统上,运行一些内部C和C++应用程序(GCC)。

Linux C和C++;:在处理像SIGSEGV这样的信号时,我还应该记录什么? 工作在一些Linux(Ubuntu)系统上,运行一些内部C和C++应用程序(GCC)。,linux,gcc,segmentation-fault,signal-handling,Linux,Gcc,Segmentation Fault,Signal Handling,处理的信号有一长串,例如SIGSEGV和SIGINT。在信号上,使用backtrace(3)和backgrace\u符号(3)获得调用堆栈。对于C++,函数名甚至用“ ABI::Y.CXAYDEMAGLILE())< /COD> 我的问题是:当这些信号出现时,还有什么其他的C/C++API可以为我们提供更多有用的信息,以便在事后进行调试?或者回溯是唯一“性感”的事情吗?您可能希望启用核心转储ulimit-c unlimited或类似版本。然后您可以将核心文件加载到GDB中,查看程序发生了什么。您

处理的信号有一长串,例如
SIGSEGV
SIGINT
。在信号上,使用
backtrace(3)
backgrace\u符号(3)
获得调用堆栈。对于C++,函数名甚至用“<代码> ABI::Y.CXAYDEMAGLILE())< /COD>
我的问题是:当这些信号出现时,还有什么其他的C/C++API可以为我们提供更多有用的信息,以便在事后进行调试?或者回溯是唯一“性感”的事情吗?

您可能希望启用核心转储
ulimit-c unlimited
或类似版本。然后您可以将核心文件加载到GDB中,查看程序发生了什么。

您确定交互式调试不是更好的选择吗?还是我没有抓住要点?这些设备在客户站点上运行。其中一些不是直接可用的,但我们可以记录我们想要的日志,并将日志文件发送回我们。谢谢,是的,这是我们目前在某些安装上所做的事情之一。如果您有核心转储,并且您有一些“始终有用”的丰富内部结构,使用GDB+Python进行一些工作可以自动拉出这些结构,并以一种有用的方式将它们与堆栈跟踪一起呈现。转储core后,在转储上运行这样的分析脚本,然后通过电子邮件或上传结果。这可能会为您节省处理整个核心文件的麻烦,因为这些文件非常依赖于应用程序。