Вопрос или проблема
Наша команда нуждается в анализе дампов памяти от тестировщиков (или иногда от клиентов), которые производят библиотеки и приложения на C++. Как на Windows, так и на Linux. Конечно, мы можем использовать gdb
для анализа, но дело в упрощении и командной работе. Знаете ли вы какие-либо веб-инструменты или плагины от Atlassian, Jetbrains или других, которые могут интегрироваться с Jenkins или BitBucket, например, которые упрощают (просмотр трассировки стека и списка локальных переменных и т. д.) анализ дампов памяти C++?
Так как вы уже знаете gdb, почему бы не автоматизировать это?
Кажется, все сейчас знают Python, так что посмотрите на эти (или выберите свой собственный способ автоматизации):
- Вызывайте и контролируйте GDB из Python
- Расширение GDB с помощью Python – с ссылкой на API для управления gdb из Python
- Скриптинг gdb
- pygdbmi – “Функция для разбора строкового вывода интерфейса gdb и возврата структурированных типов данных (словарей Python), которые могут быть сериализованы в JSON.”
Есть https://dynatrace.github.io/superdump/ :
SuperDump – это сервис для автоматизированного анализа дампов памяти. У него есть веб-интерфейс, а также REST-интерфейс для загрузки дампов памяти Windows или дампов ядра Linux.
Я, однако, не пробовал этот инструмент. Что мне не нравится, так это то, что у него так много зависимостей для сборки. Также похоже, что SuperDumper не может мониторить систему на наличие дампов памяти, и пользователям нужно их загружать (мне нужен инструмент, который не только показывает детали дампов памяти, но и “управляет их жизненным циклом” – может быть, с состояниями, такими как “новый”, “принятый к рассмотрению”, “дубликат”, “открыт тикет в Jira”?).
Mozilla поддерживает свой собственный инструмент для анализа и управления сбоями: https://github.com/mozilla-services/socorro :
Socorro – это ориентированная на Mozilla система сбора и анализа отчетов о сбоях с использованием библиотек Breakpad.
Socorro кажется довольно сложным и запутанным, судя по диаграмме на https://socorro.readthedocs.io/en/latest/overview.html.
Я, однако, не пробовал этот инструмент. Mozilla неоднократно предупреждает: “Это очень ориентированный на Mozilla продукт. В настоящее время у нас нет возможности поддерживать не-Mozilla использования.”
Так что это может быть интересным источником вдохновения или отправной точкой, но, к сожалению, это не полное решение.
Ответ или решение
Вопрос анализа дампов памяти и провалов в приложениях на C++ важен для эффективной работы команды разработчиков. Вам необходимо оптимизировать процесс анализа предоставленных дампов, чтобы улучшить совместную работу и эффективность. В этом ответе я представлю несколько веб-инструментов и подходов, которые могут быть полезны вашей команде, учитывая различные требования и технологии.
1. Инструменты для автоматизации анализа дампов
a. SuperDump
SuperDump — это современный инструмент для автоматического анализа дампов. Он предоставляет веб-интерфейс и REST-API для загрузки дампов как с Windows, так и с Linux. Однако следует обратить внимание на его зависимость от множества библиотек, что может усложнить процесс установки. Более того, вам придется вручную загружать дампы, поскольку SuperDump не может отслеживать их в реальном времени.
b. Socorro
Socorro — это инструмент, разработанный Mozilla, который позволяет управлять и анализировать отчеты о сбоях с использованием библиотек Breakpad. Несмотря на свои возможности, Socorro довольно сложен в использовании и не предназначен для сторонних проектов, так как Mozilla сообщает, что поддержка не предназначена для не-Mozilla проектов.
2. Интеграция с CI/CD инструментами
Наличие автоматизированного решения, которое можно интегрировать с такими инструментами, как Jenkins или BitBucket, значительно упростит работу вашей команды. Рассмотрите использование следующего подхода:
a. Автоматизация с помощью Python и GDB
Если ваша команда уже имеет опыт работы с gdb, стоит рассмотреть его автоматизацию с помощью Python. Существует ряд библиотек, которые позволяют взаимодействовать с GDB через Python, например:
- Pygdbmi для парсинга вывода GDB в структурированные данные.
- Python API для GDB может помочь в расширении функциональности GDB.
Скрипты, написанные на Python, могут быть интегрированы с CI/CD, что позволит автоматически обрабатывать дампы, создавая отчеты и помечая определенные состояния (например, "новый", "триаж", "дубликат"), что облегчит управление жизненным циклом дампов.
3. Подходы к улучшению команды
a. Документация и обучение
Важно обеспечить вашу команду документами и обучением, связанным с использованием выбранного инструмента или решением. Это может включать в себя:
- Вебинары по работе с инструментами.
- Документация для внутреннего использования.
b. Взаимодействие с сообществом
Наблюдение за сообществами, такими как Stack Overflow или GitHub, может помочь вашей команде находить решения для специфических проблем, связанных с анализом дампов.
Заключение
Анализ дампов является сложной задачей, требующей эффективного инструментария и командной работы. Предложенные инструменты, такие как SuperDump и Socorro, наряду с автоматизацией gdb через Python, могут предложить значительные преимущества для вашей команды. Убедитесь, что вы выбираете инструмент, который соответствует вашим конкретным требованиям, и не забывайте об обучении команды для максимизации эффективности.