0 / 0 / 0
Регистрация: 30.07.2012
Сообщений: 27
|
|
1 | |
Логирование работы программы08.08.2012, 13:44. Показов 18585. Ответов 26
Метки нет (Все метки)
Всем доброго времени суток!
Столкнулся с проблемой - мне дали программу и сказали разбирайся. Там полно различных функций и комментариев целых 0. Чтоб понять, что и какая функция делает, я подумал о логе. Как мне реализовать этот самый лог вызова функций? Саму концепцию я вроде как понимаю: нужно сделать отдельный .срр в котором будет прописана функция записи в файл строки формата: "FunctionName START... 08.08.2012 15:12:12.23456845" и потом в начале каждой вызываемой функции в самой программе просто подставить вызов функции логирования. Поправьте если я что-то понимаю не так. И как мне это все дело реализовать. Буду благодарен ссылкам на примеры и различные ресурсы где это можно узнать. Всем заранее большое спасибо!!
0
|
08.08.2012, 13:44 | |
Ответы с готовыми решениями:
26
Логирование работы программы...!? Логирование программы Как реализовать логирование работы скрипта Python Как реализовать логирование программы? |
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
|
|
08.08.2012, 13:59 | 2 |
На данном этапе, пока ты даже приблизительно не представляешь, "как оно все работает", логи - однозначно нафиг. Основание: ну, получишь ты стомегабайтный лог с миллионом строк вида "FunctionName START....." - а дальше что? Как ты собираешься разбираться с этим стомегабайтным монстром??? А если прога еще и многопоточная.... тогда вообще туши свет - разные потоки могут писать в лог так, что стоящие в программе на соседних строках FunctionName1 и FunctionName2 могут в логе быть разделены сотней-другой вызовов совершенно несвязанных других функций из других потоков....
Совет пока один: разбирайся. Умение разбираться в чужом коде - необходимо для профессионала. Требуй от менеджера всякую другую документацию про проекту - ТЗ, спецификации, описания архитектуры, и прочее... Анализируй лог системы управления версиями. Ну и конечно, начинай с выделения в коде отдельных подсистем, осознания "за что отвечает этот кусок кода?". Если комментариев ноль - можно сразу же вписывать соответствующий комментарий в код.
2
|
0 / 0 / 0
Регистрация: 30.07.2012
Сообщений: 27
|
|
08.08.2012, 14:06 [ТС] | 3 |
Большое спасибо за ценный совет. Но думаю знание создание логов в будущем тоже пригодится
0
|
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
|
|
08.08.2012, 14:19 | 4 |
Безусловно пригодится. Однако, логирование - это уже следующий этап работы, это уже сильно детальные разборки "как это работает в деталях". Вот тут, возможно, придется логировать уже не только сам факт вызова функции, но и переданные ей аргументы, и факт выхода из функции. Тут тебе будет нужен логгер, вывод в который можно отключать в разных частях программы - чтобы ненужные (не интересные в данный момент) модули не "замусоривали" лог.
Вообще, логгеров довольно много, вот пример: http://log4cpp.sourceforge.net/ Можно и написать свой собственный.
1
|
ниначмуроФ
851 / 535 / 110
Регистрация: 12.10.2009
Сообщений: 1,913
|
|
08.08.2012, 14:21 | 5 |
1
|
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
|
|
08.08.2012, 14:21 | 6 |
А кстати, каков объем проекта, который тебе вручили?
Система управлениями версиями есть? Багтрекер есть? ТЗ, проектная документация - актуальны?
0
|
0 / 0 / 0
Регистрация: 30.07.2012
Сообщений: 27
|
|||||||||||
09.08.2012, 12:43 [ТС] | 7 | ||||||||||
Я сейчас пытаюсь сделать класс, в котором создается файл и в него пишется строка, и вызвать его из программы. Скажите что я делаю не так? Вылезает ошибка С1075.
0
|
154 / 138 / 34
Регистрация: 23.05.2009
Сообщений: 275
|
||||||
09.08.2012, 12:46 | 8 | |||||
1
|
0 / 0 / 0
Регистрация: 30.07.2012
Сообщений: 27
|
|
09.08.2012, 12:49 [ТС] | 9 |
Но он все ровно выдает ошибку С1075.
0
|
2270 / 1762 / 740
Регистрация: 27.07.2012
Сообщений: 5,237
|
|||||||||||
09.08.2012, 13:11 | 10 | ||||||||||
Какое описание ошибки-то? Их тут по номерам наизусть врядли кто помнит.
Добавлено через 1 минуту Сейчас вижу, что у вас объявление класса не закончено.
Добавлено через 5 минут Ну и чтобы скомпилировалось окончательно:
1
|
0 / 0 / 0
Регистрация: 30.07.2012
Сообщений: 27
|
|
09.08.2012, 13:24 [ТС] | 11 |
Большое спасибо! Ошибку сам исправил Извините, что не дал всю информацию об ошибке.
Вопрос следующий появился: как мне сделать так, что бы в строку которую он выводит вписывалось название функции, которая вызывает класс и системное время вызова этой функции? UPD: Как я понимаю там надо как-то использовать GetType?
0
|
Заблокирован
|
|
09.08.2012, 13:28 | 12 |
D1garch, я посоветую в теле каждой функции записать нечто наподобие fprintf или ofstream<< и строки FunctionStart затем записать её параметры на входе, а также на выходе писать в файл FunctionEnd опять же записать параметры функции(в ходе отработки они могли поменяться) а также записать возвращаемое значение + к этому всему добавлять строку с временем входа и выхода из функции - и всё в файлике будет как на ладоне. Я сам применяю такой приём когда ищу неулавимые глазом косяки в функциях - по приведенному мной логу в файла достаточно прозрачно видно какая функция портит параметры или косячит
1
|
09.08.2012, 13:30 | 13 |
зачем искать все те же грабли? думаешь, тебе первому пришла в голову идея "написать лог"? найди готовых, выбери который получше и не трать время! оно тебе понадобится, чтобы в проекте разобраться. а то начали делать изделие, переключились на изготовление инструментов для изготовления изделий, затем - на изготовление инструментов для изготовления инструментов, приспособы и пр. до изделия так руки и не дошли...
0
|
0 / 0 / 0
Регистрация: 30.07.2012
Сообщений: 27
|
|
09.08.2012, 13:37 [ТС] | 14 |
0
|
|
09.08.2012, 14:08
#15
|
1
|
Временно недоступен
957 / 228 / 14
Регистрация: 12.04.2009
Сообщений: 926
|
||||||
09.08.2012, 14:18 | 16 | |||||
Я уже не первый раз вижу такие записи:
0
|
2270 / 1762 / 740
Регистрация: 27.07.2012
Сообщений: 5,237
|
|
09.08.2012, 14:22 | 17 |
#pragma, это не совсем С++, это C++/CLI. Управляемый код, со сборщиком мусора и прочими новыми приблудами.
1
|
Временно недоступен
957 / 228 / 14
Регистрация: 12.04.2009
Сообщений: 926
|
|
09.08.2012, 14:25 | 18 |
D1garch, попробуйте переменную __PRETTY_FUNCTION__ ,хотя, возможно, этот макрос есть только в gcc.Вот, надеюсь, пригодится http://gcc.gnu.org/onlinedocs/... Names.html
0
|
0 / 0 / 0
Регистрация: 30.07.2012
Сообщений: 27
|
|
09.08.2012, 14:52 [ТС] | 19 |
Странная вещь творится
Если заменить строку того что пишет программа в файл, а именно "This is the appended line. " допустим на какой нибудь "Hello, World!", то в файл она по прежнему струячит "This is the appended line. " С чем это может быть связанно? UPD: Выяснил: нейм спейс System::Text::Encoding::ASCII не нравится программе. Если удалить Encoding::ASCII, программа работает нормально
0
|
#pragma
|
09.08.2012, 15:02
Логирование работы программы
#20
|
Не по теме:
0
|
09.08.2012, 15:02 | |
Логирование при закрытии программы вручную Логирование: скажется ли постоянно открытый поток для записи на скорости работы Зависание программы после return. Может быть, логирование поможет? Как вывести время работы программы ПОСЛЕ завершения работы progressBar? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |