Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.85/91: Рейтинг темы: голосов - 91, средняя оценка - 4.85
0 / 0 / 0
Регистрация: 30.07.2012
Сообщений: 27
1

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

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

Author24 — интернет-сервис помощи студентам
Всем доброго времени суток!

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

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

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

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

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


Всем заранее большое спасибо!!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.08.2012, 13:44
Ответы с готовыми решениями:

Логирование работы программы...!?
Всем привет!!! Имеется программулина, она постоянно делает некие действия, эти действия нужно...

Логирование программы
Добрый день! Возникла необходимость прологировать некую программу. сам лог понятен procedure...

Как реализовать логирование работы скрипта Python
Необходимо работу скрипта Python (stdout, stderr) логировать в файл. Если отдельно перенаправить...

Как реализовать логирование программы?
Есть программа, которая работает некоректно: в какой-то моментпередаются неправильные значения....

26
Эксперт С++
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
Цитата Сообщение от D1garch Посмотреть сообщение
Как мне реализовать этот самый лог вызова функций?
http://habrahabr.ru/post/148781/
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.

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
154 / 138 / 34
Регистрация: 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
0 / 0 / 0
Регистрация: 30.07.2012
Сообщений: 27
09.08.2012, 12:49  [ТС] 9
Но он все ровно выдает ошибку С1075.
0
2277 / 1768 / 741
Регистрация: 27.07.2012
Сообщений: 5,251
09.08.2012, 13:11 10
Какое описание ошибки-то? Их тут по номерам наизусть врядли кто помнит.

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

Добавлено через 5 минут
Ну и чтобы скомпилировалось окончательно:
C++
1
System::Text::Encoding::ASCII
1
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
556 / 510 / 25
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
09.08.2012, 13:30 13
Цитата Сообщение от D1garch Посмотреть сообщение
Я сейчас пытаюсь сделать класс, в котором
зачем искать все те же грабли? думаешь, тебе первому пришла в голову идея "написать лог"? найди готовых, выбери который получше и не трать время! оно тебе понадобится, чтобы в проекте разобраться. а то начали делать изделие, переключились на изготовление инструментов для изготовления изделий, затем - на изготовление инструментов для изготовления инструментов, приспособы и пр. до изделия так руки и не дошли...
0
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
Временно недоступен
957 / 228 / 14
Регистрация: 12.04.2009
Сообщений: 926
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-компилятора, или что-то ещё? И что вообще означает эта запись?
0
2277 / 1768 / 741
Регистрация: 27.07.2012
Сообщений: 5,251
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

Не по теме:

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

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.08.2012, 15:02

Логирование при закрытии программы вручную
Здравствуйте друзья. Есть мною написанная программа. В программе пишется номера по порядку....

Логирование: скажется ли постоянно открытый поток для записи на скорости работы
Здравствуйте. В программе необходимо логирование. Сделал пока так: в начале работы открыл файл, в...

Зависание программы после return. Может быть, логирование поможет?
Приветствую! Программа виснет после return одной функции. Я останавливался там дебаггером,...

Как вывести время работы программы ПОСЛЕ завершения работы progressBar?
У меня почему-то сначала выводится время в MessageBox, а затем уже завершает свою работу...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru