Avatar billede mxs Nybegynder
23. marts 2007 - 18:14 Der er 12 kommentarer og
1 løsning

Mit største problem, error handling. Hvordan?

Hej
Jeg har været igang med at programmere på et projekt i et stykke tid nu. Jeg havde planlagt det hele. Faktisk brugt utrolig lang tid på det, og jeg havde aftalt med mig selv at jeg ville have at alle fejl skulle vises via en exceptions, men jeg kan nu se at dette ikke er måden at gøre det på. Derfor har jeg nu bestemt mig for at bruge return koderne 1 for success og -1 for fail og skrive til cerr og/eller clog, og kun bruge exceptions når der sker noget exceptionelt, men burde jeg overhovedet bruge exceptions?
Er cerr ikke bare cout uden stdio og stderr?
Avatar billede mxs Nybegynder
23. marts 2007 - 18:19 #1
Mit projekt har nogle wrapper klasser hvor jeg blandt andet kan behandle ip adresser og sende og modtage tekst via sockets. Disse funktioner jeg bruger til dette fra C biblioteket. Kunne jeg mon bruge perror? Mit største problem er egentlig hvordan jeg gør mit system felksibel med error behandling. Altså kan jeg bruge en mellemting mellem perror og cerr? Eller ville det være dumt?
Avatar billede arne_v Ekspert
23. marts 2007 - 18:23 #2
cin = stdin
cout = stdout
cerr = stderr
Avatar billede arne_v Ekspert
23. marts 2007 - 18:25 #3
medmindre vi er i en situation hvor man kan faa mange fejl saa vil jeg foretraekke
exceptiosn fremfor retur vaerdier
Avatar billede arne_v Ekspert
23. marts 2007 - 18:25 #4
med hensyn til at udskrive kan du kigge paa log4cpp
Avatar billede mxs Nybegynder
23. marts 2007 - 18:39 #5
Ah ok. Der er ikke et sted hvor der kommer mange fejl, så som en algoritme som kører over større talrækker i mange dage, men jeg bruger jo disse C funktioner, og jeg kunne forstille mig at hvis der skete en fejl i disse funktioner, så har de en eller anden standard tekst tilknyttet så som "xxx is not an directory". Kunne det ikke være muligt at hente denne tekst ud, så brugeren helt nøjagtig ved hvad det er som er gået galt!? En funktion kan vel godt have flere fejl jo, og jeg ved jo ikke hvad fejlen er ved bare at kontrollere efter -1. Kunne jeg lave en klasse eller funktion som jeg kunne bruge sammen med min fejlhåndtering som lavede og skrev fejlene. Hentede evt. fejlmeddeleser fra C funktioner, skrev den til standard error channel, og evt loggede det. Det jeg er gået ud fra er, hvis der sker en fejl, så bliver følgende gjort:

try
{
    write(...);
}catch(int i)
{
  myErrorObject();
  throw writeException();
}

Hvor myErrorObject laver logningen, skrivningen via cerr og evt. henter oplysninger via perror. Kunne man gøre sådan?
Avatar billede mxs Nybegynder
23. marts 2007 - 18:42 #6
Altså det jeg vil lave er vel bare en enkel version af log4cpp.
Jeg vil dog ikke bruge log4cpp, da dette projekt er for at holde mig igang med programmering og for at lae et projekt som har alt i sig, som jeg ind til videre kan med C++, og som jeg føler mig sikker på. Fejlhåndtering er dog nyt for mig, men det skal jo ikke at lære noget nyt.
Avatar billede arne_v Ekspert
23. marts 2007 - 18:51 #7
kalde du C kode som returnerer en fejl kode kan du hente fejl teksten til den kode
og smide en exception, hvis det altsaa giver mening

exceptions giver meget mening hvis du skal hoppe langt tilbage i kalde stakken
Avatar billede mxs Nybegynder
23. marts 2007 - 19:04 #8
Ja, lige netop, smide en exception, med teksten som er sat via C funktionen. Jeg tror jeg er ved at forstå det ordsprog som jeg fik da jeg snakkede med en anden en "only throw an exception when som exceptional happens", altså hvis du ved der sker mange fejl, så lad være med at smide en exception, men lave en return kode.
Avatar billede mxs Nybegynder
23. marts 2007 - 19:13 #9
altså lidt ala

try
{
write(....);
}
catch(int i)
{
if(i == -1)
{
throw new writeException(perror("Der skete en fejl: "));
}
}
Avatar billede arne_v Ekspert
23. marts 2007 - 19:37 #10
snarere:

if(dinCfunc() == -1)
{
  throw new FoobarException(perror("Der skete en fejl: "));
}
Avatar billede mxs Nybegynder
23. marts 2007 - 19:44 #11
Nå jo. Så kan man jo fange den :) write har jo ingenting at smide.
Avatar billede mxs Nybegynder
23. marts 2007 - 19:57 #12
Det tror jeg er min løsning forløbig. Smid svar og jeg giver point.
Avatar billede arne_v Ekspert
24. marts 2007 - 00:03 #13
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester