0

我在 C++ 中使用 pantheios 日志库,我没有发现 pantheios 是否可以捕获段错误,然后在退出之前强制打印缓冲区数据。

我可以捕捉到段错误,但我没有找到最终打印包含我的日志的缓冲区的方法。

Rgds,

4

2 回答 2

1

我很确定图书馆尝试注册信号处理程序是不好的做法,所以如果 pantheios 这样做我会感到惊讶。

如果你认为你可以有效地处理它,你应该自己捕捉信号。您确定有一个待清空的日志缓冲区,并且不是尝试记录一些首先触发段错误的数据的操作吗?

于 2012-06-20T07:28:19.533 回答
1

我担心这里有一个可怕的误解:您了解导致段错误的原因吗?

在普通情况下,段错误是由空取消引用引起的。这很容易解决,因为问题通常很容易发现。

然而,在令人讨厌的情况下,内存损坏会触发段错误,该内存损坏会在您期望常规指针的地方写入垃圾,并导致您尝试访问您不应该拥有的内存。

现在,假设您为段错误注册了一个处理程序。显然,您无法区分您是在微不足道的情况下还是令人讨厌的情况下,因此您应该假设内存已损坏并且您无法信任它...

是什么让您认为日志消息不会被破坏?

没有理智的图书馆应该尝试处理段错误。

如果发生段错误,请将内存状态转储到核心转储文件中并严重崩溃。如果你不能相信记忆,那么无论如何你都无法采取任何有意义的行动。

于 2012-06-20T08:54:49.287 回答