Более богатый статус ведения журнала / трассировки для приложений C ++ - PullRequest
1 голос
/ 06 апреля 2009

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

Я заметил здесь объявление на SO для Smartinspect , которое, похоже, выводит это на более высокий уровень, предоставляя трассы стека для каждого журнала, более интересные варианты, такие как построение графиков и значений данных, которые меняются со временем, много чуток к основной идее простого списка выходных текстовых строк.

Поскольку я использую C ++, Smartinspect даже не будет работать для меня.

Небольшое прибегание к поиску находит тонны каркасов логирования, но ничего, что, кажется, не делает ничего, кроме текстовых дампов. Являются ли их более интересные инструменты (похожи на Smartinspect?) Более эффективными? Коммерческий или открытый исходный код - это хорошо, а мультиплатформенность - большой плюс.

Ответы [ 3 ]

4 голосов
/ 06 апреля 2009

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

Я не программирую на Java, но я предполагаю, что он может обеспечить трассировку стека так же, как и Python: стек, вероятно, является просто еще одним объектом во время выполнения, который можно проверять и манипулировать.

C ++, с другой стороны, не обладает ни одной из этих приятностей: он должен быть языком, близким к металлическому, который в основном добавляет объектную ориентацию в C (я уверен, что другие придут с гораздо более эланоральными объяснениями Преимущество C ++ перед C, но это другое обсуждение).

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

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

Другие вещи, на которые вы могли бы обратить внимание, - это интеграция с syslogd, для которого, опять же, могут существовать более богатые инструменты анализа (это предоставит вам возможность, аналогичную рекламируемой для SmartInspect - на основе TCP / IP). каротаж).

Примечание: многое из того, что я сказал здесь о C ++, основано на предыдущем опыте, когда я пытался найти подходящие фреймворки в C ++ для выполнения тонких, интроспективных типов вещей (таких как правильные фиктивные объекты и т. Д.).

2 голосов
/ 06 апреля 2009

Несколько лет назад я написал статью о сбросе стека в C / C ++ с Windows и Unix / Linux в DDJ. Может быть, это поможет вам:

См. http://www.ddj.com/architect/185300443

0 голосов
/ 06 апреля 2009

Если вы можете ограничить себя определенной платформой, вы можете добавить следы стека в свои журналы вручную. Мы используем, например, функциональность glibc для получения трассировки стека в Linux, чтобы прикрепить трассировки стека к нашему классу исключений. В Windows есть аналогичные функциональные возможности, но, как уже упоминалось, эти инфраструктуры не переносимы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...