Forum » Programiranje » [ General ] printf() debugging...
[ General ] printf() debugging...
BigWhale ::
Banzai!
Nekdo bi lahko en sticky prispevek o printf() debuggingu napisal. Vidim, da vecina ljudi, ki sem vprasanja posilja se ne ve tocno kako to zgleda in kaj to je, se manj pa, da se posluzuje tega...
Kaj je pa vas favourite debugging method?
Nekdo bi lahko en sticky prispevek o printf() debuggingu napisal. Vidim, da vecina ljudi, ki sem vprasanja posilja se ne ve tocno kako to zgleda in kaj to je, se manj pa, da se posluzuje tega...
Kaj je pa vas favourite debugging method?
Vesoljc ::
debugging metoda?
odvisno kaj delaš
včasih zna biti tekst premalo :)
formatiranje teksta kot to zna *printf pa mi je osebno bolj pri srcu kot pa recimo objektni pristop (cout). največja prednost imho je hitrost ter preprostost s katero lahko tekst na "lep" način prikažemo na zaslon. ima pa eno slabost, ki jo v praksi kar pogosto doživim. ni varen. c namreč ne preverja podanih parametrov (razen števila,?). tako lahko v zaporedje paremetrov, ki smo ga definirali v stringu ala
, vrinemo praktično karkoli:
v najboljšem primeru bomo dobili pri ispisu "junk". v slabših pa recimo kak access violation. no, take buge se sicer zna precej hitro odpraviti, samo pogruntat moraš, da zadeva izpisuje napačne vrednosti
o samem debuggingu pa tko:
- uporaba preprecesora
- več nivojev
- če je potrebno tudi runtime opcije
recimo:
pri izpisu pa čim več informacij:
- timestamp
- this
- ...
imeti hard kopijo callstack-a zna priti prav.
odvisno kaj delaš
včasih zna biti tekst premalo :)
formatiranje teksta kot to zna *printf pa mi je osebno bolj pri srcu kot pa recimo objektni pristop (cout). največja prednost imho je hitrost ter preprostost s katero lahko tekst na "lep" način prikažemo na zaslon. ima pa eno slabost, ki jo v praksi kar pogosto doživim. ni varen. c namreč ne preverja podanih parametrov (razen števila,?). tako lahko v zaporedje paremetrov, ki smo ga definirali v stringu ala
printf("ime = %s; priimek = %s; starost = %3d; iq = %2.8f", ime, priimek, starost, iq);
, vrinemo praktično karkoli:
printf("ime = %s; priimek = %s; starost = %3d; iq = %2.8f", ime, iq, starost, priimek);
v najboljšem primeru bomo dobili pri ispisu "junk". v slabših pa recimo kak access violation. no, take buge se sicer zna precej hitro odpraviti, samo pogruntat moraš, da zadeva izpisuje napačne vrednosti
o samem debuggingu pa tko:
- uporaba preprecesora
- več nivojev
- če je potrebno tudi runtime opcije
recimo:
#if (DEBUG && (DEBUG_LEVEL > NORMAL)) || DEBUG_THIS #endif
pri izpisu pa čim več informacij:
- timestamp
- this
- ...
imeti hard kopijo callstack-a zna priti prav.
Abnormal behavior of abnormal brain makes me normal...
Zgodovina sprememb…
- spremenil: Vesoljc ()
CCfly ::
Je že kdo preizkušal loggerje, kot je na primer log4cpp (ekvivalent log4j v Javi) ?
Overhead naj bi bil menda zanemarljiv.
Overhead naj bi bil menda zanemarljiv.
"My goodness, we forgot generics!" -- Danny Kalev
Zvedavec ::
Moja najljubša metoda za (splošen) lov na hrošče je assert. Enostavno lahko namečeš v kodo na tisoče testov, ki jih potem v release verziji ni. In recimo namečeš še kakšne assert(0) v dele kode, kjer naj načeloma program ne bi zašel in so le zasilni izhodi. Če se ti pa ob tem požene še razhroščevalnik, je to sploh idila.
Je pa printf (oziroma še bolje fprintf) zelo praktičen za lov na hrošče, kadar ne moreš blizu z razhroščevalnikom.
Moraš biti pa seveda pozoren pri parametrih, to je pač C. Tile moderni prevajalniki so čisto razvadili ljudi z opozarjanjem na tipe parametrov pri večini funkcij. Precej bolj nevaren je izpis nizov, kjer lahko manjka zaključitev. Načeloma bi moral pred vsakim izpisom preveriti, da niz ni predolg (in to ne s strlen!).
Je pa printf (oziroma še bolje fprintf) zelo praktičen za lov na hrošče, kadar ne moreš blizu z razhroščevalnikom.
Moraš biti pa seveda pozoren pri parametrih, to je pač C. Tile moderni prevajalniki so čisto razvadili ljudi z opozarjanjem na tipe parametrov pri večini funkcij. Precej bolj nevaren je izpis nizov, kjer lahko manjka zaključitev. Načeloma bi moral pred vsakim izpisom preveriti, da niz ni predolg (in to ne s strlen!).
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | Število decimalk???Oddelek: Programiranje | 1583 (1087) | donkihod |
» | [C] Branje iz datotekeOddelek: Programiranje | 1720 (1551) | BigWhale |
» | [C++] Preverjanje ce je program dos ali win32Oddelek: Programiranje | 1412 (1068) | BigWhale |
» | [NALOGA][C] - Sortiranje učencevOddelek: Programiranje | 1322 (1175) | m4r3 |
» | strcpy reče segmatation faultOddelek: Programiranje | 1498 (1449) | MasterMind |