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

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

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

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

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

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

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

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


Всем заранее большое спасибо!!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.08.2012, 13:44     Логирование работы программы
Посмотрите здесь:

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

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

Вообще, логгеров довольно много, вот пример: http://log4cpp.sourceforge.net/
Можно и написать свой собственный.
PointsEqual
ниначмуроФ
 Аватар для PointsEqual
832 / 516 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
08.08.2012, 14:21     Логирование работы программы #5
Цитата Сообщение от D1garch Посмотреть сообщение
Как мне реализовать этот самый лог вызова функций?
http://habrahabr.ru/post/148781/
CheshireCat
Эксперт С++
2907 / 1235 / 78
Регистрация: 27.05.2008
Сообщений: 3,309
08.08.2012, 14:21     Логирование работы программы #6
А кстати, каков объем проекта, который тебе вручили?
Система управлениями версиями есть? Багтрекер есть? ТЗ, проектная документация - актуальны?
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();
 
}
Заранее большое спасибо!
Andsteadur
152 / 136 / 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();
 
}
D1garch
0 / 0 / 0
Регистрация: 30.07.2012
Сообщений: 27
09.08.2012, 12:49  [ТС]     Логирование работы программы #9
Но он все ровно выдает ошибку С1075.
John Prick
754 / 687 / 123
Регистрация: 27.07.2012
Сообщений: 1,974
Завершенные тесты: 3
09.08.2012, 13:11     Логирование работы программы #10
Какое описание ошибки-то? Их тут по номерам наизусть врядли кто помнит.

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

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

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

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

Не по теме:

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

#pragma
Временно недоступен
 Аватар для #pragma
952 / 223 / 6
Регистрация: 12.04.2009
Сообщений: 921
09.08.2012, 14:18     Логирование работы программы #16
Я уже не первый раз вижу такие записи:
C++
1
2
3
FileStream^ fs = gcnew FileStream( "c:\\temp\\TestLog.txt",FileMode::Append,FileAccess::Write,FileShare::Write );
StreamWriter^ sw = gcnew StreamWriter( "c:\\temp\\TestLog.txt",true,Encoding::ASCII );
String^ NextLine = "This is the appended line.\n";
Объясните, кому не сложно, почему токен (символ) '^' не вызывает у вас ошибок компиляции? Это какая-то фишка VS-компилятора, или что-то ещё? И что вообще означает эта запись?
John Prick
754 / 687 / 123
Регистрация: 27.07.2012
Сообщений: 1,974
Завершенные тесты: 3
09.08.2012, 14:22     Логирование работы программы #17
#pragma, это не совсем С++, это C++/CLI. Управляемый код, со сборщиком мусора и прочими новыми приблудами.
#pragma
Временно недоступен
 Аватар для #pragma
952 / 223 / 6
Регистрация: 12.04.2009
Сообщений: 921
09.08.2012, 14:25     Логирование работы программы #18
D1garch, попробуйте переменную __PRETTY_FUNCTION__ ,хотя, возможно, этот макрос есть только в gcc.Вот, надеюсь, пригодится http://gcc.gnu.org/onlinedocs/gcc/Function-Names.html
D1garch
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, программа работает нормально
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.08.2012, 15:02     Логирование работы программы
Еще ссылки по теме:

C++ Описание работы программы
Скрин работы программы C++

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

Или воспользуйтесь поиском по форуму:
#pragma
09.08.2012, 15:02     Логирование работы программы
  #20

Не по теме:

этот макрос эта переменная есть только в gcc

Yandex
Объявления
09.08.2012, 15:02     Логирование работы программы
Ответ Создать тему
Опции темы

Текущее время: 02:03. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru