Jump to content

Search the Community

Showing results for tags 'debugging'.

  • Search By Tags

    Oddělujte čárkami
  • Search By Author

Content Type


Fórum

  • Obecné
    • Všeobecné
    • Všechno možné
  • Programování
    • Poradna
    • Návody
    • Tvorba
    • Hledám programátora
  • Herní oblast
    • Poradna
    • Jak na to?
    • Herní kontext
    • Herní zážitky
    • Komunita
  • Grafika
    • Poradna
    • Návody
    • Tvorba
  • Ostatní
    • Hardware a software
    • Hledám/nabízím
    • Archiv
    • 3D Tisk

Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


Web


Facebook


Jabber


Skype


Steam


Twitter


Github


Pastebin

Found 1 result

  1. Obsah Úvod Čo sú to runtime erorry Príklad použitia Záver Úvod Pri vývoji softvéru je veľmi ľahké urobiť nejakú chybu. Na testovanie (debugovanie) sa používajú rôzne metódy, jednou z tých agresívnejších môžu byť runtime errory. Je len na Vás, či si vyberiete túto metódu s využitím runtime errorov / výnimiek / exceptions. V návode sa v podstate nenaučíte nič nové, patrí medzi "zložitejšie" len preto, že na správne využitie týchto informácií musíte mať isté programátorské myslenie a poznať peklo debugovania komplexných programov. Čo sú to runtime errory Určite ste sa stretli s tým, že Vám padol za behu server s textom Run time error 4: "Array index out of bounds" Stalo sa to, že server na pozadí pri každom priradení hodnoty kontroluje, či ste neprekročili veľkosť premennej. Server zistil, že áno a zhodil server. V momente ste vedeli, že v kóde je chyba. Keby server nepadol, čo by sa stalo? V prípade, že by nedochádzalo ku kontrole, že či nebola prekročená veľkosť pola, zapisovanie údajov by pokračovalo ďalej v pamäti (aj za danou premennou) a mohlo by sa stať, že by sa prepísali hodnoty nasledujúcich premenných / polí. Takáto chyba je prakticky nemožná na detekciu. Napíšem príklad z mojej praxe. Čo to obnáša? V prípade, že dôjde k nejakej chybe, padne server. V prípade, že tam nejaká chyba je, nájdete ju ľahšie. Prakticky platí, čim väčší mód, tým ťažšie sa hľadajú chyby a presne to uľahčujú runtime errory. V skratke teda ide len o to, že namiesto bežnej kontroly extrémnych hodnôt premenných, nevrátite "0", "-1", alebo nejakú podobnú hodnotu, ale rovno zhodíte server a poviete programátorovi, kde hľadať chybu. Samozrejme pri nasadení servera online môžete tieto runtime errory vypnúť a používať ich len pri debuggingu. Príklad použitia Pre zjednodušenie práce som dal dokopy definície runtime errorov (žiadny zložitý kód). Includ sa dá stiahnuť tu. Nezabudnite ho uložiť do pawno/include. #define DEBUGGING // povoli run time errory | pre ich vypnutie staci zakomentovat / zmazat tento riadok #include <runtime_errors> // includnut AZ ZA DEFINE DEBUGGING main() { new a = 4; TestZero(a, AMX_ERR_PARAMS, "Tento string sa nevypise kedze a nie je 0."); a = 0; TestZero(a, AMX_ERR_PARAMS, "Hodnota \"a\" nemoze mat nulu."); print("Tento string sa uz nevypise, kedze server padol v predoslom kroku."); } Výstup: ... Loaded 0 filterscripts. Hodnota "a" nemoze mat nulu. Script[gamemodes/test.amx]: Run time error 25: "Parameter error" Number of vehicle models: 0 Odkiaľ je funkcia TestZero()? To je len príklad, nemusíte ju použiť. Nachádza sa už defaultne v include. Vyzerá takto: stock TestZero(var, err, str[]) { // nazov funkcie si zmente ako chcete #pragma unused var, err, str #if defined DEBUGGING if (var == 0) { // tuto podmienku mozete zmenit, vsetko ostatne nechajte tak print(str); switchError(err); } #endif } Svoje vlastné funkcie si môžete vytvoriť na základe predlohy TestZero(), alebo akokoľvek sa rozhodnete. Odkiaľ mám hodnotu AMX_ERR_PARAMS? To sú oficiálne hodnoty vstavané do Pawn AMX, ich zoznam sa nachádza v include runtime_errors, ale na ukážku sem nejaké dám. Ich hodnoty nie sú nijak podstatné, upravujú len správu čo sa vypíše pri páde servera. Môžete tiež všade použiť AMX_ERR_NONE, čo nevypíše žiadnu ďalšiu správu o páde a vypísať svoje vlastné informácie pre uľahčené nájdenie chyby. #define AMX_ERR_NONE 0 #define AMX_ERR_EXIT 1 // forced exit #define AMX_ERR_ASSERT 2 // assertion failed #define AMX_ERR_STACKERR 3 // stack/heap collision #define AMX_ERR_BOUNDS 4 // index out of bounds Úplný zoznam errorov sa nachádza v include. Záver To, či je toto využitie dobré, alebo nie, nikto nemôže povedať. Je to jednoducho štýl programovania a "exceptions", alebo "runtime errory" sú bežnou súčasťou vyšších programovacích jazykov. Ich implementácia v Pawn je vcelku chabá, ale dá sa použiť. Ak sa však raz pre neho rozhodnete, buďte zodpovední a používajte ho všade.
×
×
  • Create New...