Приветствую.
Есть программа. Со всякой кучей потоков и ветвлений. Пытаюсь логгировать (log4net), но каждый раз получается так, что надо идти пошагово до ошибки, ибо ошибка может быть не рядом с эксепшеном.
Возникла у меня мысль1: логгируем всё. Абсолютно всё. Пусть это будет замедлять работу программы, но результат, по-моему, того стоит. По крайней мере в режиме дебаг.
Вопрос: есть ли какие-то средства (например, к тому же log4net), чтобы так настроить логгирование? (Если пользоваться log4net, то не охото в каждую функцию вставлять строчки логгирования.)
А потом возникла мысль2: это ведь существенно поможет и со сбором ошибок от пользователей. Например: прога пишет все свои операции. Вдруг прилетает эксепшен. Так она отправляет мне (например, по почте), весь ход процесса до этой ошибки в этом потоке. Может не весь, а какие-то "верхушки", а я, если посмотрев лог, решу, что данных не достаточно, запрошу детализацию.
Имеет смысл так делать или сейчас принято не так?
Спасибо.
Имеет смысл делать все, что поможет вам исправлять ошибки. Тут лучше перебздеть, чем недобздеть. И в то же время надо знать грань. Писать каждые несколько строк что-то типа Log("Entering printing invoice block") — это лишнее.
Я в корпоративном приложении детально логирую все возникшие исключения (контекст (операция) в котором произошло исключение, тип и текст исключения и всех вложенных исключений, стек, время возникновения исключения, компьютер на котором возникло исключение). Дополнительно я сделал компонент, который размещается на всех формах и подписывается на основные события нужных контролов и логирует изменения в этих контролах, т.е. в логе оказывается что-то типа:
Такой лог менее полезен чем лог исключений, но иногда все-таки помогал и он.
Раз в пару недель я полностью просмотриваю лог исключений и исправляю обнаруженные баги.
Задачу, которую вы описываете, полностью (и даже больше) решает средство IntelliTrace из 2010-й студии. В случае, если у юзера происходит какая-то непонятная ошибка, на его компьютере устанавливается утилита, которая записывает полностью ход выполнения программы. Он присылает вам файлик с этими данными. Вы его загружаете в отладчик и смотрите все что произошло у юзера. Сам не юзал, просто прочитал в документации об этом.
Правда, стоит эта радость немерено денег (доступна только в Ultimate версии). Но, может быть, удастся приобрести подешевле?
Здравствуйте, sunshine, Вы писали:
S>на его компьютере устанавливается утилита, которая записывает полностью ход выполнения программы
Скажите, а что за утилита такая? Про интелитрейс знаю (можно просматривать по шагам с возвратом назад) а вот про такую интересную утилитку слышу вервые.
Здравствуйте, 0K, Вы писали:
S>>на его компьютере устанавливается утилита, которая записывает полностью ход выполнения программы
0K>Скажите, а что за утилита такая? Про интелитрейс знаю (можно просматривать по шагам с возвратом назад) а вот про такую интересную утилитку слышу вервые.
Не помню, где прочитал о том, что это можно и для обычных юзеров использовать (теоретически возможно, что мог и перепутать, хотя почему-то такое чувство, что об этом и читал).
Кстати, про особенности интеллитрейс пишут, что он "позволяет возвращаться назад при отладке". Но в этом ведь ничего нового нет, это уже и в 2005-й и 2008-й студиях было возможно (путем перетаскивания желтого курсора слева, означающего текущую точку выполнения).
Здравствуйте, sunshine, Вы писали:
S>Правда, стоит эта радость немерено денег (доступна только в Ultimate версии). Но, может быть, удастся приобрести подешевле?
Значит идея хорошая.
Кажется, это не сильно трудно реализовать. Правда, будет геморно писать прогу — в каждую функцию подробно вручную вставлять логгирование.
Здравствуйте, Don Reba, Вы писали:
DR>Я в Немерле пользуюсь несложным макросом вставляющим код логирования во все функции специально помеченных классов, включая вложенные.
Ну, у меня не Немерле, а до сих пор 2-ой фреймворк.
Здравствуйте, Real 3L0, Вы писали:
R3>Приветствую. R3>Есть программа. Со всякой кучей потоков и ветвлений. Пытаюсь логгировать (log4net), но каждый раз получается так, что надо идти пошагово до ошибки, ибо ошибка может быть не рядом с эксепшеном. R3>Возникла у меня мысль1: логгируем всё. Абсолютно всё. Пусть это будет замедлять работу программы, но результат, по-моему, того стоит. По крайней мере в режиме дебаг.
R3>Вопрос: есть ли какие-то средства (например, к тому же log4net), чтобы так настроить логгирование? (Если пользоваться log4net, то не охото в каждую функцию вставлять строчки логгирования.)
R3>А потом возникла мысль2: это ведь существенно поможет и со сбором ошибок от пользователей. Например: прога пишет все свои операции. Вдруг прилетает эксепшен. Так она отправляет мне (например, по почте), весь ход процесса до этой ошибки в этом потоке. Может не весь, а какие-то "верхушки", а я, если посмотрев лог, решу, что данных не достаточно, запрошу детализацию.
R3>Имеет смысл так делать или сейчас принято не так? R3>Спасибо.