Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
rezna
Založen: 27. 07. 2007 Příspěvky: 2156
|
Zaslal: 30. červen 2010, 09:28:37 Předmět: |
|
|
if.then - mnohem lepsi je predchazet temto situacim pomoci assertu - mam kod v DEBUG verzi plny assertu na to co musi platit - jakmile to neplati (treba prijde nenulovy pointer a ma byt NULL hned mi to hlasi) |
|
Návrat nahoru |
|
 |
if.then
Založen: 13. 04. 2008 Příspěvky: 579
|
Zaslal: 30. červen 2010, 09:58:29 Předmět: |
|
|
Proti gustu žádný dišputát, ale já osobně mám radši menší a hezčí kód. A asserty navíc nechrání proti všemu (dobře, release build taky ne, ale...) _________________ For guns and glory, go to www.ceske-hry.cz.
For work and worry, execute VC++. |
|
Návrat nahoru |
|
 |
rezna
Založen: 27. 07. 2007 Příspěvky: 2156
|
Zaslal: 30. červen 2010, 10:08:34 Předmět: |
|
|
proti chybam se musi bojovat vsemi moznymi prostredky - nikdy nemas vsechno podchycene, ale cim vic toho podchytis, tim mene stresu a prace ti dela nasazeni a odladeni nove verze
mezi zaklady patri
-- vhodne komentovany kod (ten casto naznaci ze je nekde chyba - protoze logicky komentar nesedi ke kodu) - je treba ale komentovat 'proc' to delam, ne 'co' delam
-- asserty - hlidat si vstupy do funkci a vystupy z nich - neocekavany vstup/vystup poukazuje na chybu
-- automatizovane buildovani a testovani nekolikrat denne |
|
Návrat nahoru |
|
 |
frca

Založen: 28. 07. 2007 Příspěvky: 1561
|
Zaslal: 30. červen 2010, 14:39:17 Předmět: |
|
|
Co bych poradil já, už asi všichni víte (radím to vždycky).
BTW neznáte nějaký assert, který by jen vypsal warning, ale neukončil program? _________________ www.FRANTICWARE.com |
|
Návrat nahoru |
|
 |
rezna
Založen: 27. 07. 2007 Příspěvky: 2156
|
Zaslal: 30. červen 2010, 14:52:41 Předmět: |
|
|
@frca - nvm - MSVS haze asserty, pres ktery je moznost skocit do VS primo do debugu - to ti nestaci? |
|
Návrat nahoru |
|
 |
frca

Založen: 28. 07. 2007 Příspěvky: 1561
|
Zaslal: 30. červen 2010, 15:06:33 Předmět: |
|
|
Mně se líbí právě asserty v gtk, které sice vypíšou warning v assert formátu, ale program jede dál, jako by se nechumelilo. Stahovat a procházet zdrojáky gtk se mi jaksi nechce, ale asi budu muset... _________________ www.FRANTICWARE.com |
|
Návrat nahoru |
|
 |
rezna
Založen: 27. 07. 2007 Příspěvky: 2156
|
Zaslal: 30. červen 2010, 15:22:42 Předmět: |
|
|
to mi prave nesedi - porusenej assert chce okamzite zjistit proc - jak to budes zpetne zjistovat z logu?
takhle mi to skoci, okamzite debuguju a reknu si - 'aha ja kokot' - opravim a jede se znova
ty warningy muzou taky dopadnout tak ze je zacnes ignorovat - nic te nenuti to opravit, protoze te to nebrzdi ve vyvoji |
|
Návrat nahoru |
|
 |
frca

Založen: 28. 07. 2007 Příspěvky: 1561
|
Zaslal: 30. červen 2010, 15:45:28 Předmět: |
|
|
Tak gtk používá g_return_if_fail(expr) (makro z glibu), které ale má bohužel ještě ten efekt, že se vrátí z aktuální funkce. Jinak já nic nezjišťuju zpětně z logu, ale vidím to hned v terminálu. Warningy se vždy snažím opravovat (moje poslední aplikace žádné nevypisuje). _________________ www.FRANTICWARE.com |
|
Návrat nahoru |
|
 |
Pavel
Založen: 29. 07. 2007 Příspěvky: 54 Bydliště: Litovel
|
Zaslal: 30. červen 2010, 15:53:01 Předmět: |
|
|
frca napsal: |
neznáte nějaký assert, který by jen vypsal warning, ale neukončil program? |
Myslis neco jako?
kód: |
#define MY_ASSERT(v) if (!(v)) { ... }
|
 |
|
Návrat nahoru |
|
 |
frca

Založen: 28. 07. 2007 Příspěvky: 1561
|
Zaslal: 30. červen 2010, 16:04:27 Předmět: |
|
|
Jo, něco takového, ale standardizovaného, pokud to existuje. _________________ www.FRANTICWARE.com |
|
Návrat nahoru |
|
 |
rezna
Založen: 27. 07. 2007 Příspěvky: 2156
|
Zaslal: 30. červen 2010, 16:10:53 Předmět: |
|
|
frca napsal: |
Tak gtk používá g_return_if_fail(expr) (makro z glibu), které ale má bohužel ještě ten efekt, že se vrátí z aktuální funkce. Jinak já nic nezjišťuju zpětně z logu, ale vidím to hned v terminálu. Warningy se vždy snažím opravovat (moje poslední aplikace žádné nevypisuje). |
to je putna jestli to ctes z logu nebo to mas v terminalu - jak to pak navodis znovu tu situaci?
IMHO je mnohem lepsi v situaci, kdy neplati nejake pravidlo, ktere platit ma, mit moznost ihned videt watch a call-stack a chybu odstranit nebo pravidlo opravit |
|
Návrat nahoru |
|
 |
Pavel
Založen: 29. 07. 2007 Příspěvky: 54 Bydliště: Litovel
|
Zaslal: 30. červen 2010, 17:47:32 Předmět: |
|
|
frca napsal: |
Jo, něco takového, ale standardizovaného, pokud to existuje. |
Proc? Udelej si presne sam co potrebujes... |
|
Návrat nahoru |
|
 |
frca

Založen: 28. 07. 2007 Příspěvky: 1561
|
Zaslal: 30. červen 2010, 20:44:31 Předmět: |
|
|
rezna: Určitě jsou situace, kdy je to, co popisuješ, výhodné.
Zároveň ale se často hodí vypisovat i warningy, aniž by aplikace hned padala.
Přiznám se, že jsem zatím s assertem nelaboroval natolik, abych věděl, jak se s ním poperou gdb a valgrind.
Mám dotaz k visualku: Když to vyhodí assert a zapne debugger, lze pak v programu pokračovat? (Tzn. rozjet ho od assertu dál.) Tipoval bych, že jo. _________________ www.FRANTICWARE.com |
|
Návrat nahoru |
|
 |
Quiark

Založen: 29. 07. 2007 Příspěvky: 816 Bydliště: Chlívek 401
|
Zaslal: 30. červen 2010, 21:27:49 Předmět: |
|
|
No, když dáš F5, tak to pokračovat nebude. Ale možná se dá nějak zmlátit, aby to šlo.
Jinak podle mě to, co chceš, je prachsprosté logování. _________________ Mám strach |
|
Návrat nahoru |
|
 |
rezna
Založen: 27. 07. 2007 Příspěvky: 2156
|
Zaslal: 1. červenec 2010, 08:00:13 Předmět: |
|
|
@Quiark - prachsproste logovani to neresi - proto to je pres to skaredy volani z glibu.
pokud neprojde assert je neco spatne a nasledujici kod nejspis zarucene spadne.
jako treba tu
kód: |
NON_NULL_PTR(p); p->Method() |
proto taky nejde pokracovat po assertu ve visualku.
assert neni warning, ze je mozna neco ne uplne dobre, assert je jasna chyba, ktera se musi vyresit |
|
Návrat nahoru |
|
 |
|