Dalsi Muj Hloupy Dotaz.. (CrashLog) – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Dalsi Muj Hloupy Dotaz.. (CrashLog) – C / C++ – Fórum – Programujte.comDalsi Muj Hloupy Dotaz.. (CrashLog) – C / C++ – Fórum – Programujte.com

 

Ivo
~ Anonymní uživatel
93 příspěvků
15. 6. 2007   #1
-
0
-

Ahoj lidi.. je to docela davno kdy jeden clovek ktery vyvijel stejnou aplikaci jako ja mi ukazoval jak ma udelany crashlog.. pokazdy kdyz aplikace spadla , vytvorila soubor JmenoAplikace.pid ve kterym bylo prehledne vyúpsany jak se jedna po druhy volaly ty funkce nez to spadlo..

tzn bylo tam treba:



CServerDlg.CServerDlg()
CServerDlg.LoadBaList()
CServerDlg.CServerDlg()
CServerDlg.AddClient(nId)
CServerDlg.GetClientID(nId)
CServerDlg.GetClientName(nId)
CServerDlg.CheckIfBanned(nId)
CIPControl.IsBanned(nId)
CServerDlg.KickClient()
CServerDlg.SendMessage(nId, Client %s Kicked From Server)
CServerDlg.CServerDlg()
CServerDlg.RemoveClientID(nId)




a takhle podobne rozepsany.. do () to vpisovalo i stringy ktery se mezi tema jednotlivyma funkcema prenaseli..

mel jsem na tvorbu toho crashlogu tutorial, a fungovalo to skvele, ale stare kody jsem nekde vytratil a tu adresu na ten tutorial nemuzu za boha najit :(

nekdo kdo mate zkusenost s timhle crashlogem.. nebo vite jak v aplikaci udelat podobnej, pls pomozte :( ja nemam abslutne zadnou ideu :(

Nahlásit jako SPAM
IP: ...–
Jura
~ Anonymní uživatel
637 příspěvků
15. 6. 2007   #2
-
0
-

To zanoření bych realizoval pomocí čítače referencí, kdy při každém vytvoření objektu Logu, tedy v konstruktoru navíšil o jedničku, a tím by se dalo třeba v metodě WriteMessage realizovat odsazení. Při zavolání destruktoru bych tento čítač snížil a tím pádem i odsazení. Parametry bych řešil pomocí příkazů preprocesoru #x, ten by vrátil příslušný token. Pokud se mi bude chtít taky něco vymyslím, večer by jsi mohl očekavát nějaký výsledek - když půjde všechno dobře(ale to se nejspíš nestane:D, asi víš jak to chodí...)

Nahlásit jako SPAM
IP: ...–
ivo
~ Anonymní uživatel
93 příspěvků
15. 6. 2007   #3
-
0
-

Kdyz se to nahodou stane budu ti MOC MOC MOC zauzlovanej :) protoze bych tohle fakt potreboval, a absolutne to neumim :D :D asi si beru vetsi sousto nez zvladnu ale uz se deje :D

Nahlásit jako SPAM
IP: ...–
Jura
~ Anonymní uživatel
637 příspěvků
16. 6. 2007   #4
-
0
-

To ivo:
Tak nakonec píšu až teď. Bohužel momentálně nemám jaksi čas, tak jen nastíním, jak by to mohlo vypadat(je to jen skelet, ael da se pouzit):



#include <iostream>
#include <cstdarg>
using namespace std;

class CSimpleIvoLog
{ // zakaze kopirovani
CSimpleIvoLog(CSimpleIvoLog const& );
CSimpleIvoLog& operator=(CSimpleIvoLog const& );

static int mNumOfTabs;
static char const* mFileName;
protected:
void Write(char const* line) const
{ std::FILE* mHandle = std::fopen(mFileName, "a"); // tohle by slo take lepe udelat
if(!mHandle) return;
fprintf(mHandle, line);
std::fclose(mHandle);
std::fflush(mHandle);
}
public:
CSimpleIvoLog() throw()
{ mNumOfTabs++;
}

virtual ~CSimpleIvoLog() throw()
{ if(mNumOfTabs > 0)
{ mNumOfTabs--;
}
}

virtual void LogInfo(char const* str, char const* file, const char* fun, int line) const
{ char buf[1024]="Info ";
char tabs[512];
std::memset(tabs,'\t', mNumOfTabs);
tabs[mNumOfTabs] = '\0';
std::strcat(buf, file);std::strcat(buf, " ");
//std::strcat(buf, itoa(line,10)); std::strcat(buf, " ");
std::strcat(buf,tabs);
std::strcat(buf, str);
std::strcat(buf, fun);std::strcat(buf, " ");
std::strcat(buf, "\n");
Write(buf);
}
virtual void LogError(char const* str, char const* file, const char* fun, int line) const
{ LogInfo(str, file, fun, line);
}
};

int CSimpleIvoLog::mNumOfTabs = -1;
char const* CSimpleIvoLog::mFileName = "Ivo.txt";

#define LogInfo(msg) LogInfo(msg,__FILE__, __FUNCTION__ , __LINE__)


void a();
void b();
void c();
void d();

int main()
{
b();
return 0;
}

void a()
{ CSimpleIvoLog log;
log.LogInfo("volano ");
d();
c();
}

void b()
{ CSimpleIvoLog log;
log.LogInfo("volano ");
a();
c();

}

void c()
{
CSimpleIvoLog log;
log.LogInfo("volano ");
d();
}

void d()
{
CSimpleIvoLog log;
log.LogInfo("volano ");
}

Jak sis asi vsiml, je to navrzeno tak, ze z teto tridy muzes dedit - pak staci prepsat metody LogInfo a LogError. V techto fci si ten text zformatujes, jak chces-> treba do html a zapises metodou Write. A co se tech nazvu promennych tzce, tak to opravdu netusim, jak resit pocet parametru. Zkousel jsem neco, ale marne. Snad nekdo jiny, to dotahne do zdarneho konce.

Nahlásit jako SPAM
IP: ...–
Ivo
~ Anonymní uživatel
93 příspěvků
16. 6. 2007   #5
-
0
-

a lami otazka na zaver .) jak se to pouziva? :D

Nahlásit jako SPAM
IP: ...–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 89 hostů

Podobná vlákna

Hloupy dotaz — založil Matej Zabsky

"Mysql dotaz v dotaz" — založil Tomáš Sedlmajer

Můj pejsek — založil Curo

Můj program — založil Dominik Rozporka

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý