Jef*_*ffV 5 c++ boost boost-thread boost-log
我有一个使用增强日志记录的应用程序。在关闭期间,它会因空指针访问而发生访问冲突。当我单步执行代码直至失败时,似乎 boost::log dll 正在被解除分配,然后 boost::thread 代码尝试访问曾经被 log dll 占用的内存。
我没有在自己的代码中使用任何 boost 线程,因此假设 boost-thread dll 由 boost log 使用。
为了确保所有接收器在关闭之前被销毁,我调用: core->flush() 和 core->remove_all_sinks()
我正在使用 boost 1.60,并且也尝试过使用 boost 1.63。相同的结果。
有没有办法确保在退出/卸载 dll 之前完全关闭 boost 日志记录核心?
此问题可能与 boost 系统设置的区域设置对象有关。同样,在您的情况下,该区域设置可能会在 Boost.Log 取消初始化之前被破坏,从而导致崩溃。
根据 boost 文档,特别是日志文件轮换模块。他们为类似案例Boost 已知问题提供了解决方法
解决方案是在主循环中初始化语言环境,以便 boost 将有足够的周期在最后进行清理。
int main(int argc, char* argv[])
{
boost::filesystem::path::imbue(std::locale("C"));
initialize_log();
// ...
}
Run Code Online (Sandbox Code Playgroud)