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

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

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

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

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

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

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

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

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


Всем заранее большое спасибо!!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
08.08.2012, 13:44
Ответы с готовыми решениями:

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

Логирование программы
Добрый день! Возникла необходимость прологировать некую программу. сам лог понятен procedure TStdMainForm.Log (Text: string); var F:...

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

26
быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
09.08.2012, 15:52
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от #pragma Посмотреть сообщение
Я уже не первый раз вижу такие записи:
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-компилятора, или что-то ещё? И что вообще означает эта запись?
C C++ Visual C++ 2008_Пахомов
глава 7 "Работа с указателями и структурами данных"
1
556 / 510 / 25
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
09.08.2012, 22:48
посмотри, например, на это решение.
http://axter.com/ezlogger/
простенько и со вкусом. маленькое и работает.
1
0 / 0 / 0
Регистрация: 30.07.2012
Сообщений: 27
10.08.2012, 11:02  [ТС]
И еще раз здравствуйте!

В итоге у меня осталась последняя ошибка: в классе logging используется для записи System::string, а в функции std::string. При попытке записи месседжа вылетает ошибка такого формата:

cannot convert from 'std::string' to 'System::string'

вот конечный код

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//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(string msg)
    {
        FileStream^ fs = gcnew FileStream( "c:\\temp\\Log.txt",FileMode::Append,FileAccess::Write,FileShare::Write );
        fs->Close();
        StreamWriter^ sw = gcnew StreamWriter( "c:\\temp\\Log.txt",true);
        string NextLine = (msg);
        sw->WriteLine( NextLine );
        sw->Close();
    } 
};
C++
1
2
3
4
5
6
7
8
9
10
11
//Logging.cpp
#include "stdafx.h"
#include "Logging.h"
using namespace std;
 
 
int main()
{
    Logging::WriteToLog("FuncName  main");
 
}
Можно ли как-нибудь конвертировать строку?

Заранее большое спасибо!
0
556 / 510 / 25
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
10.08.2012, 12:35
C++
1
2
std::string str = "abcd";
System::String sysStr = gcnew ::String (str.c_str());
(кажется. проверь)
1
0 / 0 / 0
Регистрация: 30.07.2012
Сообщений: 27
10.08.2012, 13:04  [ТС]
Не пашет вроде как. Я нашел вот такую штуку:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
// convert_system_string.cpp
// compile with: /clr
#include <string>
#include <iostream>
using namespace std;
using namespace System;
 
void MarshalString ( String ^ s, string& os ) {
   using namespace Runtime::InteropServices;
   const char* chars = 
      (const char*)(Marshal::StringToHGlobalAnsi(s)).ToPointer();
   os = chars;
   Marshal::FreeHGlobal(IntPtr((void*)chars));
}
 
void MarshalString ( String ^ s, wstring& os ) {
   using namespace Runtime::InteropServices;
   const wchar_t* chars = 
      (const wchar_t*)(Marshal::StringToHGlobalUni(s)).ToPointer();
   os = chars;
   Marshal::FreeHGlobal(IntPtr((void*)chars));
}
 
int main() {
   string a = "test";
   wstring b = L"test2";
   String ^ c = gcnew String("abcd");
 
   cout << a << endl;
   MarshalString(c, a);
   c = "efgh";
   MarshalString(c, b);
   cout << a << endl;
   wcout << b << endl;
}
Ток я не до конца понимаю как это прикрутить мне...
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
10.08.2012, 14:39
D1garch, вот как и обещал - программа с логированием и искуственным непредсказуемым багом
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
#include <ctime>
#include <fstream>
#include <iostream>
using namespace std;
 
/**/ //òå ñòðîêè êîòîðûå îòìå÷åíû ýòèì çíàêîì ïîñëå
//óñïåøíûõ òåñòîâ ïðîñòî óäàëÿåì
ofstream log("log.txt");//Îáúÿâëÿåì íàø ïîòîê çàïèñè
const int N = 5;//Ïóñòü áóäåò ìàññèâ èç 5-òè ýëåìåíòîâ
 
//Ôóíêöèÿ ïå÷àòàåò ìàññèâ íà ýêðàíå
void showArr(int n, int * arr);
//Ôóíêöèÿ ðàíäîè\ìíî çàïîëíÿåò ìàññèâ
void fillArr(int n, int * arr);
//Ñîáñòâåííî ôóíêöèÿ çàïèñûâàåò â ìàññèâ
//âìåcòî i-ãî ýëåìåíòà ðåçóëüòàò val/arr[i]
//ïîìíèì ÷òî ó íàñ ãàðàíòèðîâàíî â ìàññèâå åñòü 0
void divArr (int n, int * arr, int val);
 
//Ïåðåãðóæåííàÿ ôóíêöèÿ îñóùåñòâëÿþùàÿ çàïèñü â ïîòîê ifs 
//ðàçìåðà è çíà÷åíèé ìàññèâà arr
void showArr(int n, int * arr, ofstream &ofs);
 
int main()
{
    int a[N] = {0};
    //Ýòî áóäåò èíäåêñ ýëåìåíòà ñ íóë¸âûì çíà÷åíèåì
    int j = rand()%(N - 1);
    //Íàïîëíÿåì ìàññèâ íåíóëåâûìè çíà÷åíèÿìè ñëó÷àéíûì îáðàçîì
    fillArr(N, a);
    //Ïðèñâàåâàåì çíà÷åíèå 0 j - ìó èíäåêñó
    a[j] = 0;//Ïðè÷¸ì ÿ íå çíàþ êàêîé ýòî ïî ñ÷¸òó 
    //èíäåêñ è ïðîãðàììà äî íà÷àëà ðàáîòû íå çíàåò
    //êîðî÷å òàê ñêàçàòü ðàíäîìíàÿ îøèáêà
 
    //ïå÷àòàåì ýëåìåíòû ìàññèâà
    cout<<"Input  array : ";showArr(N, a);
    divArr (N, a, 11);//Âîò íàøà êîððåêòíàÿ ôóíêöèÿ,
    //êîòîðàÿ íåêîððåêòíî îòðàáîòàåò ïðè äåëåíèè íà 0
    cout<<"Output array : ";showArr(N, a);
    
    return 0;
}
 
void showArr(int n, int * arr)
{
    for(int i = 0; i < n; i++)
        cout<<arr[i]<<" ";
    cout<<endl;
}
 
void fillArr(int n, int * arr)
{
    //Ñîáñòâåííî îãîâîðåííàÿ ìíîé âñòàâêà âíà÷àëå è êîíöå ôóíêöèè
    /**/log<<"\tfillArr started :\nparams > \n";
    /**/showArr(n, arr,log);/**/
    srand(time(0));
    for(int i = 0; i < n; i++)
        arr[i] = 1 + rand()%10;
    /**/log<<"\tfillArr ended   :\nparams > \n";
    /**/showArr(n, arr,log);/**/
}
 
void divArr (int n, int * arr, int val)
{
    /**/log<<"\tdivArr started :\nparams > \n";
    /**/showArr(n, arr,log);/**/
    srand(time(0));
    for(int i = 0; i < n; i++)
    {
        arr[i] = val / arr[i];
        /**/log<<"\tdivArr iteration :"<<i + 1<<endl;
        /**/log<<"\tdivArr params > \n";
        /**/showArr(n, arr,log);/**/
        
    }
    /**/log<<"\tdivArr ended   :\nparams > \n";
    /**/showArr(n, arr,log);/**/
}
 
 
//ôóíêöèÿ çàïèøåò â ïîòîê ìàññèâ åñëè arr arr != 0 
void showArr(int n, int * arr, ofstream &ofs)
{
    if(arr)
    {
        ofs<<n<<endl;
        for(int i = 0; i < n; i++)
            ofs<<arr[i]<<" ";
        ofs<<endl;
    }
}
log.txt
fillArr started :
params >
5
0 0 0 0 0
fillArr ended :
params >
5
10 6 1 6 6
divArr started :
params >
5
10 0 1 6 6
divArr iteration :1
divArr params >
5
1 0 1 6 6
- вот и видим что на 2-й итерации мы и обломились
Миниатюры
Логирование работы программы  
1
0 / 0 / 0
Регистрация: 30.07.2012
Сообщений: 27
10.08.2012, 17:27  [ТС]
Огромное Спасибо за неоценимую помощь всем Вам!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
10.08.2012, 17:27

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
27
Ответ Создать тему
Новые блоги и статьи
Решил проблему с ошибкой пагинации сообщений с сервера на алгоритме обхода дерева "Эстафета хвоста".
Hrethgir 12.07.2026
Проблема была в том, что удалялась именно новая кнопка, а не старая. Ни один ИИ не обнаружил это, а сам я смог только когда с работой стало попроще и когда заставил работать будущее автономное. . .
сукцессия 25. Хронология ошибок
anaschu 12.07.2026
# От 50-тонного гриба до устойчивого леса: хроника ошибок при построении модели вековой сукцессии микоризы ## О чём эта статья В процессе построения ОДУ-модели (система дифференциальных. . .
сукцессия 24. Промежуточное общее описание модели
anaschu 12.07.2026
Хендофф: модель АМ→ЭКМ сукцессии микоризы (ризосфера, 50 лет) Содержание проекта Симуляция вековой (50 лет) экологической сукцессии в почве леса Основные участники: АМ-гриб, ЭКМ-гриб,. . .
сукцессия 23. Более физиологичная физиология, более экологичная экология, более диффурные диффуры.
anaschu 12.07.2026
Что реально нашли и починили за эти 5 часов Правило Линдемана (КПД конверсии сахара в тело, kEff) — раньше 100% полученного углерода шло прямо в биомассу гриба; теперь только kEff=0. 5 (после. . .
сукцессия 22. От артефактов к физиологии: калибровка агентной модели грибной сукцессии для воспроизведения сезонной динамики и pH-плато
anaschu 11.07.2026
Аннотация В данной работе представлена калибровка агентной модели динамики грибных сообществ (fungal-succession), направленная на устранение нефизичных артефактов (коллапс биомассы, мгновенное. . .
Сукцессия 20. Война автоботов. Делаем ставки. Лёд против "пш-пш!".
anaschu 11.07.2026
Битва ИИ в ризосфере: Как мы скрестили жесткие ОДУ, закон Фика и «подземный шантаж» Уважаемые коллеги! Хочу поделиться уникальным опытом ведения междисциплинарной компьютерной разработки. Прямо. . .
Сукцессия 19. Какие выводы я сделал из модели? Часть 2.Внутримикоризный стехиометрический буфер и хроно-дискретные зоны экспансии
anaschu 11.07.2026
Био-Инженерный Ликбез: Архитектура Модели Ризосферы Математический аппарат моделирования
Сукцессия 18. Какие выводы я сделал из войны грибов с деревьями? Часть 1- рассказ и немного про термины
anaschu 11.07.2026
Био-Инженерный Ликбез: Архитектура Модели Ризосферы Математический аппарат моделирования Система ОДУ описывает динамику изменения массы различных компонентов системы во времени. Ключевой. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru