Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения

Why my application crashes on process termination when file sinks are used?

Boost , Chapter 1. Boost.Log v2 , Rationale and FAQ

Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

PrevUpHomeNext

Известны проблемы с Boost.Filesystem (например, #8642 и #9219), которые влияют на Boost. Лог-файл раковины backends. Когда поглотитель файла разрушается, он пытается выполнить окончательное вращение файла журнала, которое включает в себя Boost.Filesystem для перемещения файлов. Обычно это происходит при повышении. Ядро журнала деинициализируется на этапе глобальной деинициализации после выхода main(). Суть проблемы заключается в том, что Boost.Filesystem использует объект глобальной локализации внутренне для выполнения преобразования кода символов для paths, и эта локализация может быть уничтожена до Boost. Лог деинициализируется, что приводит к аварии.

Нет никакого способа увеличить. Войдите, чтобы повлиять на порядок глобальной деинициализации, но проблема может быть решена со стороны пользователя. Одним из решений является обеспечение инициализации локализации до Boost.Log. Это может быть достигнуто путем вызова boost::path::codecvt() или boost::path::imbue() на ранней стадии запуска приложения, перед выполнением любых вызовов на Boost. Лог. Например:

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

Обратите внимание, что в этом случае вы не можете использовать Boost. Войдите в глобальные конструкторы или убедитесь, что boost::filesystem::path::imbue() по-прежнему называется первым.

Другое решение заключается в удалении и уничтожении поглотителей файлов из ядра регистрации перед возвращением из main(). Таким образом, вращение файла происходит перед выходом main(), в то время как локализация все еще действительна. Поглотители файлов могут быть удалены по отдельности или как часть вызова remove_all_sinks():

int main(int argc, char* argv[])
{
    // ...
    logging::core::get()->remove_all_sinks();
    return 0;
}

PrevUpHomeNext

Статья Why my application crashes on process termination when file sinks are used? раздела Chapter 1. Boost.Log v2 Rationale and FAQ может быть полезна для разработчиков на c++ и boost.




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: Rationale and FAQ ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-30 11:47:00
2025-05-19 18:36:26/0.0064029693603516/0