2017-02-17 198 views
4

我有一個使用boost記錄的應用程序。在關機期間,它會在空指針訪問時獲得訪問衝突。當我逐步通過代碼到失敗點時,看起來boost :: log dll被解除分配,然後boost :: thread代碼嘗試訪問曾經被日誌dll佔用的內存。Boost線程訪問在Boost中的登錄衝突登錄shutdown

我沒有在自己的代碼中使用任何boost線程,所以假設boost-thread dll被boost日誌使用。

,以確保所有被匯關機前摧毀,我打電話:核心 - >刷新()和核心 - > remove_all_sinks()

我使用升壓1.60和還與升壓1.63試過這個。同樣的結果。

在退出/卸載dll之前,有沒有辦法確保提升日誌記錄核心完全關閉?

+0

您是否有發生問題的最小代碼示例? –

+0

「Boost.Log不支持插件卸載,因爲它可以在內部保存對各種靜態數據和代碼的引用。」 - Boost日誌作者。通過避免在我的插件中使用boost日誌解決了問題,因爲它不支持我的用例。 – JeffV

+0

你的意思是應用程序關閉或系統關閉? – KonstantinL

回答

1

此問題可能與升壓系統設置的語言環境對象有關。同樣,在你的情況下,在Boost.Log被取消初始化之前,這個區域可能會被破壞,從而導致崩潰。

根據boost文檔,特別是日誌文件旋轉模塊。他們提供了類似案例的解決方法Boost known issues

解決方法是初始化主循環中的語言環境,以便升壓將有足夠的週期進行清理。

int main(int argc, char* argv[]) 
{ 
    boost::filesystem::path::imbue(std::locale("C")); 
    initialize_log(); 

    // ... 
}