我有一个使用boost日志记录的应用程序。在关机期间,它会在null指针访问上获得访问冲突。当我单步执行代码到故障点时,似乎正在释放boost::log dll,然后boost::thread代码尝试访问日志dll曾经占用的内存。
我没有在自己的代码中使用任何boost线程,因此假设boost-thread dll由boost日志使用。
为了确保在关闭之前销毁所有接收器,我调用: core->flush()和core->remove_ all _ sinks ()
我使用的是boost 1.60,我也尝试过boost 1.63。同样的结果。
在退出/卸载dlls之前,有没有办法确保boost日志记录内核完全关闭?
发布于 2017-02-25 22:07:14
此问题可能与boost系统设置的区域设置对象有关。与您的情况类似,此区域设置可能会在Boost.Log取消初始化之前被销毁,这会导致崩溃。
根据boost文档,特别是日志文件轮换模块。他们为类似的case Boost known issues提供了一种解决方法
解决方案是在主循环中初始化locale,以便boost在结束时有足够的周期进行清理。
int main(int argc, char* argv[])
{
boost::filesystem::path::imbue(std::locale("C"));
initialize_log();
// ...
}https://stackoverflow.com/questions/42308084
复制相似问题