Нарушение прав доступа к 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();
// ...
}