Форум программистов, компьютерный форум 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++ Принцип работы программы
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
09.08.2012, 15:52     Логирование работы программы #21
Цитата Сообщение от #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 "Работа с указателями и структурами данных"
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
novi4ok
549 / 502 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
09.08.2012, 22:48     Логирование работы программы #22
посмотри, например, на это решение.
http://axter.com/ezlogger/
простенько и со вкусом. маленькое и работает.
D1garch
0 / 0 / 0
Регистрация: 30.07.2012
Сообщений: 27
10.08.2012, 11:02  [ТС]     Логирование работы программы #23
И еще раз здравствуйте!

В итоге у меня осталась последняя ошибка: в классе 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");
 
}
Можно ли как-нибудь конвертировать строку?

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

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;
}
Ток я не до конца понимаю как это прикрутить мне...
-=ЮрА=-
Заблокирован
Автор FAQ
10.08.2012, 14:39     Логирование работы программы #26
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-й итерации мы и обломились
Миниатюры
Логирование работы программы  
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.08.2012, 17:27     Логирование работы программы
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
D1garch
0 / 0 / 0
Регистрация: 30.07.2012
Сообщений: 27
10.08.2012, 17:27  [ТС]     Логирование работы программы #27
Огромное Спасибо за неоценимую помощь всем Вам!
Yandex
Объявления
10.08.2012, 17:27     Логирование работы программы
Ответ Создать тему
Опции темы

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