Нарушение прав доступа к Boost Thread при выключении Boost Log

У меня есть приложение, которое использует логирование буста. Во время выключения он получает нарушение доступа при доступе с нулевым указателем. Когда я перехожу код до точки сбоя, оказывается, что библиотека boost::log dll выделяется, а затем код boost::thread пытается получить доступ к памяти, которая когда-то была занята журналом dll.

Я не использую какие-либо потоки наддува в своем собственном коде, и поэтому предположим, что dll для наддува-потока используется журналом наддува.

Чтобы убедиться, что все приемники уничтожены до выключения, я звоню: core->flush() и core->remove_all_sinks()

Я использую boost 1.60, а также пробовал это с boost 1.63. Тот же результат.

Есть ли способ убедиться, что ядро ​​лога буста полностью отключено перед выходом / выгрузкой dll?

1 ответ

Эта проблема может быть с языковым объектом, установленным системой наддува. Точно так же в вашем случае эта локаль может быть уничтожена до деинициализации Boost.Log, что приводит к сбою.

В соответствии с документами повышения, особенно модуль ротации лог-файлов. Они предоставили обходной путь для решения подобных проблем.

Решение состоит в том, чтобы инициализировать локаль в основном цикле, чтобы в boost было достаточно циклов для выполнения очистки в конце.

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

    // ...
}
Другие вопросы по тегам