Отладочный трассировка C/C++

Вопрос или проблема

Я ищу бесплатную кросс-платформенную систему ведения отладочных журналов – которую вы использовали в течение нескольких лет и можете порекомендовать на основе собственного опыта.

Обязательно

  • бесплатно, с разрешительной лицензией (например, предпочитаю MIT перед GPL (что тоже приемлемо))
  • интерфейс C / C++
  • разные уровни трассировки, например, информация, предупреждение, ошибка и т.д.
  • можно легко скомпилировать так, чтобы не генерировать код (например, с помощью #ifdef)
  • не менее одного пользовательского квалификатора для каждой трассировки. Например, подсистема / идентификатор потока
  • последовательный формат, легко парсится пользовательскими скриптами
  • автоматическое ведение файла и номера строки для каждого элемента трассировки
  • автоматическая временная метка для каждой записи
  • зрелая, стабильная и хорошо задокументированная + поддерживаемая
  • нет проблем с многопоточностью, предпочтительно автоматическое ведение идентификатора потока
  • простой и легкий для включения в проект (предпочитаю один #include, без необходимости задавать путь #include)

Хорошо бы иметь

  • вывод через последовательный порт, а также в stdout
  • тип элемента трассировки (например, интерфейс, доступ к базе данных, распределение/освобождение памяти)
  • автоматическая генерация подробной информации об исключениях
  • возможность дампа структур данных, а не только простых типов данных
  • то же самое для массивов
  • то же самое для вложенных структур, дамп в каком-либо виде дерева
  • команда для трассировки размера стека
  • и обратная трассировка стека (через несколько лет, мне интересно, что это на самом деле означает 😉
  • и свободная/используемая память
  • зашифрованный вывод, расшифровываемый по паролю
  • много бесплатных инструментов постобработки (смотрите ниже)
  • выбор вывода (экран, файл, TCP/UDP …)
  • настройка уровней трассировки изнутри кода во время выполнения

Лично я кодировал многие из этих систем на протяжении десятилетий и оставлял их позади, меняя компании. Я склонен писать скрипты для постобработки, рисуя диаграммы последовательности сообщений или гистограммы использования памяти и т.д. Мне нравится рассматривать только элементы трассировки определенного типа (все прерывания или исключения), или для данного файла или подсистемы и т.д.

Приятный GUI был бы приветствован, как и возможность перейти к строке файла трассировки, соответствующей сообщению на диаграмме последовательности сообщений, или даже к строке исходного кода, соответствующей строке файла трассировки. GUI должен позволять легко включать/исключать типы трассировки, подсистемы и т.д. (например, покажите мне только отправку сообщений и распределение памяти для подсистем F и T).

Кратко говоря, чем больше функций, тем лучше, если они не препятствуют гибкости.

Слишком большое для комментария, еще не совсем ответ, но достаточно хороших материалов, чтобы оправдать публикацию, и я беру на себя обязательство доработать это и оформить в полный ответ.

Отличный фонд Apache имеет семейство логгеров, которые могут выводить данные на несколько целей.

Из описания варианта Cxx:

Apache log4cxx – это фреймворк для ведения журналов на C++, созданный по образцу Apache log4j, который использует Apache Portable Runtime для большей части платформенно-специфичного кода и должен быть совместим с любой платформой, поддерживаемой APR. Apache log4cxx лицензирован под лицензией Apache, лицензией открытого программного обеспечения, сертифицированной Open Source Initiative.

Практически каждое крупное приложение включает свой собственный API для ведения журналов или трассировки. Введение операторов журналирования в код – это низкотехнологичный метод его отладки. Это может быть единственным способом, потому что отладчики не всегда доступны или применимы. Это обычно так для многопоточных приложений и распределенных приложений в целом.

Log4cxx имеет три основных компонента: логгеры, аппендеры и макеты. Эти три типа компонентов работают вместе, позволяя разработчикам логировать сообщения в зависимости от типа сообщений и уровня, а также контролировать во время выполнения, как эти сообщения форматируются и куда они отправляются.

В терминах log4cxx, выходное назначение называется аппендером. В настоящее время аппендеры существуют для консоли, файлов, графических компонентов, удаленных сокет-серверов, NT Event Loggers и удаленных демон-систем UNIX Syslog. Также возможно асинхронное ведение журналов.

Для моих нужд есть:

Полный список можно увидеть здесь

  • chainsaw для отображения журналируемых данных, смотрите изображение ниже

Я также ищу решение для ESP 32.

Поскольку большинство языков способны взаимодействовать с C (и/или C++), я, вероятно, возьму либо “официальную” версию Apache CXX (пока неясно, поддерживает ли она C, но не похоже на это), либо более низкоуровневую версию C (минус – это форк) и добавлю обертки, позволяющие вызывать ее, например, из Ada.

Вот как выглядит официальный вывод. Мне нужно найти формат выходного файла (и вставить его сюда), чтобы разработать другие инструменты; например, генерировать диаграммы последовательности сообщений из файла трассировки.

введите описание изображения сюда

Ответ или решение

Рекомендуемая система отладки и трассировки для C/C++

Введение

Для успешной отладки приложений на C и C++ важен надежный и функциональный инструмент трассировки. В этой статье представлен практический подход к выбору системы отладки, которая соответствует критериям пользователя. Я рекомендую Apache log4cxx — мощную библиотеку для логирования, которая на протяжении многих лет зарекомендовала себя как стабильное решение.

Основные характеристики log4cxx

  1. Лицензия и доступность: log4cxx предлагает свободное использование благодаря лицензии Apache, что соответствует требованиям по наличию разрешительной лицензии.

  2. Интерфейс на C/C++: Библиотека разрабатывается с учетом практик C++, обеспечивает полный доступ к функционалу через удобный интерфейс.

  3. Уровни трассировки: log4cxx поддерживает различные уровни логирования — от информационных сообщений до ошибок. Это позволяет гибко управлять выводом информации в зависимости от стадии разработки или развертывания.

  4. Упрощенная компиляция: Код можно легко отключить с помощью директив #ifdef, что минимизирует влияние на производительность и позволяет настраивать логирование под конкретные нужды.

  5. Настраиваемые квалификаторы: Библиотека позволяет добавить пользовательские идентификаторы, такие как идентификаторы подсистем или потоков, что улучшает диагностику.

  6. Удобочитаемый вывод: Формат логов лог4cxx можно настроить так, чтобы он был легко читаем и обрабатываем скриптами, что является важным аспектом при анализе логов.

  7. Автоматическая информация о файлах и строках: Каждое сообщение о логировании включает информацию о файле и строке, что значительно упрощает локализацию проблем.

  8. Автоматическая временная метка: Каждая запись автоматически получает временную метку, что позволяет легче отслеживать последовательность событий.

  9. Поддержка многопоточности: log4cxx исправно работает в многопоточной среде, автоматически регистрируя идентификаторы потоков, что особенно полезно для отладки многопоточных приложений.

  10. Легкость в интеграции: Для использования достаточно одного #include, что крайне упрощает интеграцию в существующие проекты.

Дополнительные функции

  • Вывод на несколько направлений: log4cxx поддерживает несколько аппендеров, позволяя выводить логи как на консоль, так и в файл, что делает систему более гибкой.

  • Типы сообщений: Библиотека обеспечивает возможность логирования с классификацией по типам, позволяя легче фильтровать нужные сообщения.

  • Гибкость в изменении уровня трассировки: На этапе выполнения вы можете изменять уровень логирования, что удобно для собранных систем.

Документация и поддержка

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

Заключение

Apache log4cxx является оптимальным выбором для разработчиков, работающих с C/C++, предоставляя все необходимые инструменты для функциональной и эффективной отладки. Это системное решение соответствует всем критериям, перечисленным в запросе, и рекомендуется на основе многолетнего опыта использования.

Для получения дополнительной информации и загрузки библиотеки посетите официальный сайт log4cxx.

Оцените материал
Добавить комментарий

Капча загружается...