C++ segfault时,流的std::OF是否正确关闭?
当我的进程发生故障时,std::ofstream是否正确关闭并刷新缓冲区?我怀疑在SeEntEt之前的日志消息丢失了,如果没有这些日志消息,调试一个长时间运行的C++服务器是一件痛苦的事:有人知道登录日志的正确方法是什么吗?C++ segfault时,流的std::OF是否正确关闭?,c++,logging,segmentation-fault,std,C++,Logging,Segmentation Fault,Std,当我的进程发生故障时,std::ofstream是否正确关闭并刷新缓冲区?我怀疑在SeEntEt之前的日志消息丢失了,如果没有这些日志消息,调试一个长时间运行的C++服务器是一件痛苦的事:有人知道登录日志的正确方法是什么吗? 分段错误通常是由于程序中的未定义行为造成的;在这种情况下,无法保证会发生什么。实际上,如果没有处理函数,segfaults通常会导致程序立即停止,因此ofstream不会自动刷新 您可以通过将std::endl写入流来结束日志代码,从而解决这个问题。这会产生刷新流的副作用。
分段错误通常是由于程序中的未定义行为造成的;在这种情况下,无法保证会发生什么。实际上,如果没有处理函数,segfaults通常会导致程序立即停止,因此ofstream不会自动刷新
您可以通过将std::endl写入流来结束日志代码,从而解决这个问题。这会产生刷新流的副作用。每次写入后刷新日志流!这需要标准库具有中断处理程序来捕获SEGFULT。我认为标准库没有任何中断处理程序。如果您向日志添加时间戳,您可能会更好地了解日志是否丢失;并刷新handleSignal中的日志?它的未定义行为是从信号处理程序调用标准库函数,因此它可能工作,也可能不工作。