Инструментальная (диагностическая) библиотека для C ++ - PullRequest
3 голосов
/ 27 мая 2009

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

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

Ответы [ 4 ]

2 голосов
/ 27 мая 2009

Вы также можете проверить libcwd :

Libcwd - это полнофункциональная библиотека поддержки отладки для C ++. Разработчики. Включает вывод отладочной информации на основе ostream с пользовательской отладкой каналы и устройства, мощная поддержка отладки выделения памяти, а также как поддержка времени выполнения для печати исходного файла: информация о номере строки и деформированные имена типов.

Также еще одна интересная библиотека журналов - pantheios :

Pantheios - это библиотека API с открытым исходным кодом C / C ++ Logging, предлагающая оптимальное сочетание 100% безопасности, эффективности, универсальности и расширяемость. Он прост в использовании и расширении, легко переносим (платформа и не зависит от компилятора), и, что лучше всего, он поддерживает традиции C вашего платите только за то, что вы используете.

2 голосов
/ 27 мая 2009

Я склонен использовать логирование для этой цели. Log4cxx работает как шарм.

1 голос
/ 27 мая 2009

Если вы делаете отладку, возможно, используйте отладчик. Сценарии GDB довольно просты в написании и использовании. Поддерживать их параллельно вашему коду может быть непросто.

Редактировать - Добавление анекдота:

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

Теперь я использовал GDB только для диагностики ошибок несколько раз, но для этих проблем у него было несколько приятных преимуществ по сравнению с системой регистрации. Сценарии GDB позволили мне собирать новые данные инструментов, не добавляя новые строки инструментов и не развертывая новую сборку моего программного обеспечения на клиенте. GDB может генерировать сообщения из сторонних библиотек (необходимо для отладки в openssl в один момент). GDB не оказывает влияния на время выполнения программного обеспечения, когда оно не используется. GDB довольно хорошо печатает содержимое объектов; система ведения журнала на уровне кода требует записи новых макросов, когда новые объекты должны регистрировать свои состояния.

Одним из недостатков было то, что сгенерированные мной скрипты GDB не имели явного отношения к исходному коду; исходный файл и сценарий GDB были разработаны независимо друг от друга. В идеале, изменения в исходном файле должны влиять и обновлять скрипт gdb. Одна из идей состоит в том, чтобы поместить в код специально отформатированные комментарии, а язык сценариев должен передать исходные файлы для создания файла сценария отладчика для исходного файла. Наконец, заставьте make-файл выполнить этот скрипт во время цикла сборки.

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

0 голосов
/ 27 мая 2009

Если вы выполняете свое приложение в Linux, вы можете использовать «ulimit» для генерации ядра при сбое вашего приложения (или assert (false), или kill -6), позже вы можете отладить с помощью gdb (gdb -c core_file) Двоичный_файл) и проанализируйте стек.

Salu2.

PD. для профилирования используйте gprof

...