【发布时间】:2017-07-07 13:53:56
【问题描述】:
我有一个使用增强日志记录的应用程序。在关闭期间,它在空指针访问时遇到访问冲突。当我单步执行代码到故障点时,似乎 boost::log dll 正在被解除分配,然后 boost::thread 代码尝试访问曾经被 log dll 占用的内存。
我没有在自己的代码中使用任何 boost 线程,因此假设 boost 日志使用了 boost-thread dll。
为确保在关闭之前销毁所有接收器,我调用:core->flush() 和 core->remove_all_sinks()
我正在使用 boost 1.60,并且也尝试过使用 boost 1.63。结果一样。
有没有办法确保在退出/卸载 dll 之前完全关闭 boost 日志记录核心?
【问题讨论】:
-
您有出现问题的最小代码示例吗?
-
"Boost.Log 不支持插件卸载,因为它在内部保存了对各种静态数据和代码的引用。" - 提升日志作者。通过避免在我的插件中使用 boost log 解决了问题,因为它不支持我的用例。
-
您是指应用程序关闭还是系统关闭?
-
DLL 卸载。该应用程序是游戏引擎中的一个 dll 插件。当插件卸载时,boost log dll和boost thread dll也会被卸载。这一次,boost 线程代码正在访问之前被 boost log 代码占用的代码空间 (RAM)。
-
@JeffV,你知道 DllMain 的限制吗?以防万一:stackoverflow.com/questions/17259729/…
标签: c++ boost boost-thread boost-log