Nano Hash - криптовалюты, майнинг, программирование

что такое окно вывода отладки журнала Boost?

Я просматривал учебные пособия и документацию Boost.Log, и во всех примерах они ссылаются на «окно отладчика» или «окно вывода отладки», но я не смог найти, что это такое. Это какое-то отдельное приложение? Где тогда скачать?

11.09.2013

Ответы:


1

Просто предположение: это, вероятно, означает «выходное» окно IDE, то есть Visual Studios или Eclipses «Выходное» окно.

11.09.2013
  • Спасибо. Но они также специально относятся к cout, поэтому мне было интересно, является ли это отдельным выделенным приложением. IDE будут выводить на cout, так что.. 11.09.2013

  • 2

    прежде чем вызывать метод журнала повышения, убедитесь, что вы настроили приемник, а это означает, что вам нужно вызвать что-то вроде этого:

    static void init_log(void)
    {
        /* init boost log
        * 1. Add common attributes
        * 2. set log filter to trace
        */
        boost::log::add_common_attributes();
        boost::log::core::get()->add_global_attribute("Scope",
            boost::log::attributes::named_scope());
        boost::log::core::get()->set_filter(
            boost::log::trivial::severity >= boost::log::trivial::trace
        );
    
        /* log formatter:
        * [TimeStamp] [ThreadId] [Severity Level] [Scope] Log message
        */
        auto fmtTimeStamp = boost::log::expressions::
            format_date_time<boost::posix_time::ptime>("TimeStamp", "%Y-%m-%d %H:%M:%S.%f");
        auto fmtThreadId = boost::log::expressions::
            attr<boost::log::attributes::current_thread_id::value_type>("ThreadID");
        auto fmtSeverity = boost::log::expressions::
            attr<boost::log::trivial::severity_level>("Severity");
        auto fmtScope = boost::log::expressions::format_named_scope("Scope",
            boost::log::keywords::format = "%n(%f:%l)",
            boost::log::keywords::iteration = boost::log::expressions::reverse,
            boost::log::keywords::depth = 2);
        boost::log::formatter logFmt =
            boost::log::expressions::format("[%1%] (%2%) [%3%] [%4%] %5%")
            % fmtTimeStamp % fmtThreadId % fmtSeverity % fmtScope
            % boost::log::expressions::smessage;
    
        /* console sink */
        auto consoleSink = boost::log::add_console_log(std::clog);
        consoleSink->set_formatter(logFmt);
    
        /* fs sink */
        auto fsSink = boost::log::add_file_log(
            boost::log::keywords::file_name = "test_%Y-%m-%d_%H-%M-%S.%N.log",
            boost::log::keywords::rotation_size = 10 * 1024 * 1024,
            boost::log::keywords::min_free_space = 30 * 1024 * 1024,
            boost::log::keywords::open_mode = std::ios_base::app);
        fsSink->set_formatter(logFmt);
        fsSink->locked_backend()->auto_flush(true);
    }
    

    выше приведен фрагмент, найденный здесь: Простой пример журнала Boost

    Когда вы хотите что-то зарегистрировать, вы пишете что-то вроде этого:

    BOOST_LOG_TRIVIAL(error) << "{ ERROR } Trying to bla bla bla\n";
    BOOST_LOG_TRIVIAL(warning) << "{ WARNING } bla bla bla\n";
    

    Результат будет найден в вашей папке отладки при работе в режиме отладки. Будет создан файл следующего вида:

    test_2018-04-09_20-08-12.0.log
    

    Вывод не будет отображаться в окне вывода отладки Visual Studio.

    Если вы не хотите регистрироваться в файле, а просто войти в окно отладки, используйте что-то вроде этого:

    OutputDebugString(L"This is an output");
    

    или добавить один дополнительный приемник в init_log - вот так:

    /* setup logging to debugger window */
    // Complete sink type
    boost::shared_ptr< boost::log::core > core = boost::log::core::get();
    // Create the sink. The backend requires synchronization in the frontend.
    boost::shared_ptr< sink_t > sink(new sink_t());
    // Set the special filter to the frontend
    // in order to skip the sink when no debugger is available
    sink->set_filter(boost::log::expressions::is_debugger_present());
    core->add_sink(sink);
    

    вам также нужно добавить это:

    #include <boost/log/sinks/debug_output_backend.hpp>
    #include <boost/log/sinks/event_log_backend.hpp>
    #include <boost/thread/future.hpp>
    
    typedef boost::log::sinks::synchronous_sink<boost::log::sinks::debug_output_backend> sink_t;
    

    Затем вывод также будет отображаться в окне отладчика.

    09.04.2018

    3

    Одним из внутренних серверов приемника boost.log является серверная часть отладчика, использующая Windows DebugOutputString.

    Отличная отдельная программа, отображающая эти сообщения, — SysInternals' DbgView (debug-view), хотя IDE обычно тоже их отображает.

    16.05.2016
  • не могли бы вы привести пример использования: basic_debug_output_backend - который является частью серверной части отладчика 09.04.2018
  • Пример кода находится в boost::log page: sink_t typedef выбирает серверную часть и используется в коротком init_logging() фрагменте кода. 11.04.2018
  • да, просто имейте в виду, что выражение вместо этого должно быть выражением - см. мой пример ниже 12.04.2018
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..