Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ segfault时,流的std::OF是否正确关闭?_C++_Logging_Segmentation Fault_Std - Fatal编程技术网

C++ segfault时,流的std::OF是否正确关闭?

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

当我的进程发生故障时,std::ofstream是否正确关闭并刷新缓冲区?我怀疑在SeEntEt之前的日志消息丢失了,如果没有这些日志消息,调试一个长时间运行的C++服务器是一件痛苦的事:有人知道登录日志的正确方法是什么吗?

分段错误通常是由于程序中的未定义行为造成的;在这种情况下,无法保证会发生什么。实际上,如果没有处理函数,segfaults通常会导致程序立即停止,因此ofstream不会自动刷新


您可以通过将std::endl写入流来结束日志代码,从而解决这个问题。这会产生刷新流的副作用。

每次写入后刷新日志流!这需要标准库具有中断处理程序来捕获SEGFULT。我认为标准库没有任何中断处理程序。如果您向日志添加时间戳,您可能会更好地了解日志是否丢失;并刷新handleSignal中的日志?它的未定义行为是从信号处理程序调用标准库函数,因此它可能工作,也可能不工作。