我在C ++中使用pantheios日志库,我没有发现pantheios是否可以捕获段错误,然后强制在退出之前打印缓冲区数据。
我可以捕获段错误,但我找不到最终打印包含我的日志的缓冲区的方法。
RGDS,
答案 0 :(得分:1)
我很确定图书馆试图注册信号处理程序是不好的做法,所以如果pantheios这样做我会感到惊讶。
如果您认为可以有效地处理它,您应该自己捕获信号。您是否确定要清空待处理的日志缓冲区,并且首先不是尝试记录触发段错误的某些数据的行为?
答案 1 :(得分:1)
我担心这里有一个可怕的误解:你明白是什么导致了段错误吗?
在普通情况下,段错误是由空取消引用引起的。它很容易修复,因为这个问题通常很容易被发现。
然而,在讨厌的情况下,段内故障是由内存损坏触发的,它会写垃圾,你会期望有一个常规指针,并引导你尝试进入你不应该拥有的内存。
现在,假设您为segfault注册了一个处理程序。显然,你无法区分你是处于琐碎还是讨厌的情况,所以你应该假设内存已经损坏而且你不能相信它......
是什么让您认为日志消息不会被破坏?
没有理智的库应该尝试处理段错误。
如果是segfault,请将内存状态转储到核心转储文件中并严重崩溃。如果你不能相信记忆,你无论如何都不能采取任何有意义的行动。