我正在使用C++中的pantheios日志库,我没有发现pantheios是否可以捕获段错误,然后在退出之前强制打印缓冲区数据。
我可以捕获段错误,但我没有找到一种方法来最终打印包含我的日志的缓冲区。
Rgds,
发布于 2012-06-20 15:28:20
我非常确定,对于一个库来说,尝试注册一个信号处理程序将是一种糟糕的做法,所以如果pantheios这样做,我会感到惊讶。
如果你认为你可以有效地处理它,你应该自己捕捉信号。您是否确定有一个挂起的日志缓冲区需要清空,并且不是试图记录某些数据的操作在一开始就触发了段故障?
发布于 2012-06-20 16:54:49
我担心这里有一个可怕的误解:您了解是什么导致了段错误吗?
在微不足道的情况下,段错误是由null取消引用引起的。它很容易修复,因为这个问题通常很容易发现。
然而,在令人讨厌的情况下,段错误是由内存损坏触发的,它会在您期望常规指针的地方写入垃圾,并导致您尝试进入不应该有的内存。
现在,假设您为segfault注册了一个处理程序。显然,你不能区分你是处于微不足道的情况还是糟糕的情况下,所以你应该假设内存被损坏了,你不能信任它……
是什么让您认为日志消息不会损坏?
任何正常的库都不应该尝试处理段错误。
如果出现了段故障,请将内存状态转储到一个core-dump文件中,并使其崩溃。如果你不能信任记忆,你就不能采取任何有意义的行动。
https://stackoverflow.com/questions/11114658
复制相似问题