Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 33, средняя оценка - 4.70
D1garch
0 / 0 / 0
Регистрация: 30.07.2012
Сообщений: 27
#1

Логирование работы программы - C++

08.08.2012, 13:44. Просмотров 4694. Ответов 26
Метки нет (Все метки)

Всем доброго времени суток!

Столкнулся с проблемой - мне дали программу и сказали разбирайся. Там полно различных функций и комментариев целых 0. Чтоб понять, что и какая функция делает, я подумал о логе.
Как мне реализовать этот самый лог вызова функций?
Саму концепцию я вроде как понимаю: нужно сделать отдельный .срр в котором будет прописана функция записи в файл строки формата:

"FunctionName START... 08.08.2012 15:12:12.23456845"

и потом в начале каждой вызываемой функции в самой программе просто подставить вызов функции логирования.

Поправьте если я что-то понимаю не так. И как мне это все дело реализовать.

Буду благодарен ссылкам на примеры и различные ресурсы где это можно узнать.


Всем заранее большое спасибо!!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.08.2012, 13:44
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Логирование работы программы (C++):

Логирование - C++
Добрый день! Как провести логирование в C++ ?(Qt тоже использую) Процесс логирования чем-то отличается от простой записи значений...

Время работы программы - C++
Здорова! Бывает в некоторых задачах нужно сравнить производительность программ, то есть время работы той или иной программы. Как их...

Прекращение работы программы - C++
int main() { string s; int c=0; int g={0}; int j=1,i=1; cin>>s;

Время работы программы - C++
как считать?и как микросекунды?именно микросекунды нужны.

Описание работы программы - C++
помогите, пожалуйста, описать работу программы #include <iostream> using namespace std; unsigned to_seconds(unsigned hours,...

Скрин работы программы - C++
Завтра сдавать работу, а мой visual тупит. Нужен только скрин) Зарание спасибо!)) #include "stdafx.h" #include<math.h> ...

26
CheshireCat
Эксперт С++
2893 / 1242 / 78
Регистрация: 27.05.2008
Сообщений: 3,375
08.08.2012, 13:59 #2
На данном этапе, пока ты даже приблизительно не представляешь, "как оно все работает", логи - однозначно нафиг. Основание: ну, получишь ты стомегабайтный лог с миллионом строк вида "FunctionName START....." - а дальше что? Как ты собираешься разбираться с этим стомегабайтным монстром??? А если прога еще и многопоточная.... тогда вообще туши свет - разные потоки могут писать в лог так, что стоящие в программе на соседних строках FunctionName1 и FunctionName2 могут в логе быть разделены сотней-другой вызовов совершенно несвязанных других функций из других потоков....

Совет пока один: разбирайся. Умение разбираться в чужом коде - необходимо для профессионала.
Требуй от менеджера всякую другую документацию про проекту - ТЗ, спецификации, описания архитектуры, и прочее... Анализируй лог системы управления версиями. Ну и конечно, начинай с выделения в коде отдельных подсистем, осознания "за что отвечает этот кусок кода?". Если комментариев ноль - можно сразу же вписывать соответствующий комментарий в код.
1
D1garch
0 / 0 / 0
Регистрация: 30.07.2012
Сообщений: 27
08.08.2012, 14:06  [ТС] #3
Большое спасибо за ценный совет. Но думаю знание создание логов в будущем тоже пригодится
0
CheshireCat
Эксперт С++
2893 / 1242 / 78
Регистрация: 27.05.2008
Сообщений: 3,375
08.08.2012, 14:19 #4
Безусловно пригодится. Однако, логирование - это уже следующий этап работы, это уже сильно детальные разборки "как это работает в деталях". Вот тут, возможно, придется логировать уже не только сам факт вызова функции, но и переданные ей аргументы, и факт выхода из функции. Тут тебе будет нужен логгер, вывод в который можно отключать в разных частях программы - чтобы ненужные (не интересные в данный момент) модули не "замусоривали" лог.

Вообще, логгеров довольно много, вот пример: http://log4cpp.sourceforge.net/
Можно и написать свой собственный.
1
PointsEqual
ниначмуроФ
836 / 520 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
08.08.2012, 14:21 #5
Цитата Сообщение от D1garch Посмотреть сообщение
Как мне реализовать этот самый лог вызова функций?
http://habrahabr.ru/post/148781/
1
CheshireCat
Эксперт С++
2893 / 1242 / 78
Регистрация: 27.05.2008
Сообщений: 3,375
08.08.2012, 14:21 #6
А кстати, каков объем проекта, который тебе вручили?
Система управлениями версиями есть? Багтрекер есть? ТЗ, проектная документация - актуальны?
0
D1garch
0 / 0 / 0
Регистрация: 30.07.2012
Сообщений: 27
09.08.2012, 12:43  [ТС] #7
Я сейчас пытаюсь сделать класс, в котором создается файл и в него пишется строка, и вызвать его из программы. Скажите что я делаю не так? Вылезает ошибка С1075.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//Это хедер logging.h
#include "stdafx.h"
#include <iostream>
#include <conio.h>
using namespace std;
using namespace System;
using namespace System::IO;
class Logging
{
public:
    static void WriteToLog()
    {
        FileStream^ fs = gcnew FileStream( "c:\\temp\\TestLog.txt",FileMode::Append,FileAccess::Write,FileShare::Write );
        fs->Close();
        StreamWriter^ sw = gcnew StreamWriter( "c:\\temp\\TestLog.txt",true,Encoding::ASCII );
        String^ NextLine = "This is the appended line.\n";
        sw->WriteLine( NextLine );
        sw->Close();
    }
C++
1
2
3
4
5
6
7
8
9
10
//А это сама программа ligging.cpp
#include "stdafx.h"
#include "logging.h"
 
 
int main()
{
    void WriteToLog();
 
}
Заранее большое спасибо!
0
Andsteadur
153 / 137 / 3
Регистрация: 23.05.2009
Сообщений: 275
09.08.2012, 12:46 #8
C++
1
2
3
4
5
6
7
8
9
#include "stdafx.h"
#include "logging.h"
 
 
int main()
{
    Logging::WriteToLog();
 
}
1
D1garch
0 / 0 / 0
Регистрация: 30.07.2012
Сообщений: 27
09.08.2012, 12:49  [ТС] #9
Но он все ровно выдает ошибку С1075.
0
John Prick
801 / 734 / 145
Регистрация: 27.07.2012
Сообщений: 2,107
Завершенные тесты: 3
09.08.2012, 13:11 #10
Какое описание ошибки-то? Их тут по номерам наизусть врядли кто помнит.

Добавлено через 1 минуту
Сейчас вижу, что у вас объявление класса не закончено.
C++
1
};
допишите в конец.

Добавлено через 5 минут
Ну и чтобы скомпилировалось окончательно:
C++
1
System::Text::Encoding::ASCII
1
D1garch
0 / 0 / 0
Регистрация: 30.07.2012
Сообщений: 27
09.08.2012, 13:24  [ТС] #11
Большое спасибо! Ошибку сам исправил Извините, что не дал всю информацию об ошибке.

Вопрос следующий появился: как мне сделать так, что бы в строку которую он выводит вписывалось название функции, которая вызывает класс и системное время вызова этой функции?

UPD: Как я понимаю там надо как-то использовать GetType?
0
-=ЮрА=-
Заблокирован
Автор FAQ
09.08.2012, 13:28 #12
D1garch, я посоветую в теле каждой функции записать нечто наподобие fprintf или ofstream<< и строки FunctionStart затем записать её параметры на входе, а также на выходе писать в файл FunctionEnd опять же записать параметры функции(в ходе отработки они могли поменяться) а также записать возвращаемое значение + к этому всему добавлять строку с временем входа и выхода из функции - и всё в файлике будет как на ладоне. Я сам применяю такой приём когда ищу неулавимые глазом косяки в функциях - по приведенному мной логу в файла достаточно прозрачно видно какая функция портит параметры или косячит
1
novi4ok
551 / 504 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
09.08.2012, 13:30 #13
Цитата Сообщение от D1garch Посмотреть сообщение
Я сейчас пытаюсь сделать класс, в котором
зачем искать все те же грабли? думаешь, тебе первому пришла в голову идея "написать лог"? найди готовых, выбери который получше и не трать время! оно тебе понадобится, чтобы в проекте разобраться. а то начали делать изделие, переключились на изготовление инструментов для изготовления изделий, затем - на изготовление инструментов для изготовления инструментов, приспособы и пр. до изделия так руки и не дошли...
0
D1garch
0 / 0 / 0
Регистрация: 30.07.2012
Сообщений: 27
09.08.2012, 13:37  [ТС] #14
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
D1garch, я посоветую в теле каждой функции записать нечто наподобие fprintf или ofstream<< и строки FunctionStart затем записать её параметры на входе, а также на выходе писать в файл FunctionEnd опять же записать параметры функции(в ходе отработки они могли поменяться) а также записать возвращаемое значение + к этому всему добавлять строку с временем входа и выхода из функции - и всё в файлике будет как на ладоне. Я сам применяю такой приём когда ищу неулавимые глазом косяки в функциях - по приведенному мной логу в файла достаточно прозрачно видно какая функция портит параметры или косячит
А можно немного по подробнее?
0
-=ЮрА=-
09.08.2012, 14:08     Логирование работы программы
  #15

Не по теме:

Цитата Сообщение от D1garch Посмотреть сообщение
А можно немного по подробнее?
D1garch, попробую накидать проектик + попробую придумать не на поверхности лежащую ошибку и чтобы лог как раз её показывал, мне надо какое-то время на всё это...

1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.08.2012, 14:08
Привет! Вот еще темы с ответами:

Скорость работы программы - C++
Здравствуйте, не подскажите примерами, как можно посчитать скорость работы части программы, например: Sum= a-b; Узнать за сколько...

Убыстрение работы программы - C++
Написал программу по поиску максимальной подстроки из заданных строк. Работает правильно, но нужно оптимизировать по времени выполнения(Не...

Принцип работы программы - C++
Смысл программы: подсчет количества слов и предложений из подключенного файла. Код есть, только не понимаю, почему подсчет слов (s) идет...

прекращение работы программы - C++
int main(){ int i; cin&gt;&gt;i; cout&lt;&lt;i; if(i==5) cout&lt;&lt;&quot;i=&quot;&lt;&lt;i&lt;&lt;endl; else (как тут прекратить программу просто что бы ничего не...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
09.08.2012, 14:08
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru