Klávesové zkratky na tomto webu - základní
Přeskočit hlavičku portálu


Programování pro PalmOS počítače krok za krokem (62)

aktualizováno 
Dnes si povíme o různých chybách, které mohou nastat při běhu programu, a o způsobech, jak se s nimi vypořádat.

5.4. Informování programátora a uživatele o chybě

Zatímco u stolních počítačů si uživatelé na častou nutnost restartovat operační systém již zvykli, u přenosných zařízení, jako jsou PDA a mobilní telefony, očekávají dlouhodobou spolehlivost a bezpečnost dat. Proto musíme již při návrhu našich aplikací předcházet chybám, které by mohly ovlivnit důvěru uživatele v naši aplikaci a v mobilní zařízení obecně.

Při psaní aplikace mohou nastat tři druhy chyb. První z nich jsou chyby programátora. Příkladem těchto chyb je záměna identifikátoru políčka pro editaci textu a tlačítka, použití špatné proměnné pro uložení výsledku nebo třeba špatná kombinace parametrů a textu výzvy u funkce FrmCustomAlert(). Tyto chyby se často označují za chyby interní a vedou ke špatné funkci programu, nebo přímo k fatální chybě operačního systému PalmOS a nutnosti restartovat počítač.

Druhá skupina chyb reaguje na nečekané události při běhu programu, například na nedostatek paměti. Tyto chyby se vyskytují nepravidelně a nejsou-li ošetřeny, vedou k neočekávaným zhroucením aplikace. Nečekané události je možné předvídat, a například po každém požadavku na větší blok paměti kontrolovat, zda byl doopravdy vytvořen. Pokud k nečekané události dojde, měla by aplikace co nejrychleji skončit a to i za cenu nutnosti restartovat operační systém.

Třetím druhem chyb jsou chyby uživatele. Uvedené tři skupiny se od sebe liší zejména tím, jak a kdy je nutno je obsloužit. Rozebereme si krátce všechny tři druhy chyb a uvedeme možnosti jejich ošetření.

Chyby programátora

Při psaní programů se může lehce stát, že spleteme jména dvou proměnných, dvou konstant, špatně uzávorkujeme výraz nebo blok kódu. Výsledkem je, že program dělá něco jiného, než jsme původně očekávali. Hledáním podobné chyby v programu můžeme strávit dlouhé hodiny; chybová hlášení operačního systému PalmOS neoplývají informacemi, které by nám v ladění pomáhaly.

Proto je vhodné vkládat na klíčová místa programu kontrolní bloky, které slouží k ověření povolených hodnot proměnných, parametrů funkcí a podobně. V jazyce C/C++ pro tento druh kontrol existuje makro assert(). Hlavičkové soubory operačního systému PalmOS obsahují podobná makra, která můžeme v našich programech použít.

ErrNonFatalDisplayIf(podmínka, text)
ErrFatalDisplayIf(podmínka, text)

Makra testují výraz a pokud je nenulový, zobrazí chybové hlášení. Závisí na definici ERROR_CHECK_LEVEL.

Vstupní parametry
  • podmínka - testovaný výraz
  • text - hlášení o chybě, které je zobrazeno, má-li podmínka nenulovou hodnotu

Makra ErrNonFatalDisplayIf() a ErrFatalDisplayIf() se od sebe liší tím, že druhé z nich po zobrazení chybového hlášení restartuje operační systém. Makro ErrNonFatalDisplayIf() používáme pro méně závažné chyby, které dovolují pokračovat v provádění programu.

Chceme-li použít makra ErrNonFatalDisplayIf() a ErrFatalDisplayIf() v naší aplikaci, musíme před vložením hlavičkového souboru PalmOS.h nebo v souboru Makefile definovat konstantu ERROR_CHECK_LEVEL podle následující tabulky:

  Funkce ErrNonFatalDisplayIf() Funkce ErrFatalDisplayIf()
#undef ERROR_CHECK_LEVEL
ignorována ignorována
#define ERROR_CHECK_LEVEL ERROR_CHECK_PARTIAL
ignorována zobrazí chybovou hlášku a restartuje operační systém
#define ERROR_CHECK_LEVEL ERROR_CHECK_FULL
zobrazí chybovou hlášku a umožní pokračovat v provádění aplikace zobrazí chybovou hlášku a restartuje operační systém

Příklad použití funkce ErrFatalDisplayIf() je v následujícím rámečku. Změníme-li později definici na prvním řádku tak, že konstanta ERROR_CHECK_LEVEL nebude definována, nebude výsledná aplikace obsahovat kontroly chyb a výsledný soubor *.prc bude menší.

#define ERROR_CHECK_LEVEL ERROR_CHECK_FULL
#include 

...

void UlozText(Char* text)
{
   Char buf[100];

   ErrFatalDisplayIf(!text, "špatná hodnota parametru funkce UlozText()");
   ErrFatalDisplayIf(StrLen(text) > 100, "UlozText(): příliš dlouhý text");

   StrCopy(buf, text);
   ...   
}

Nemusíme se omezovat na makra definovaná v hlavičkových souborech PalmOS. Každý z vás je už jistě schopen naprogramovat podobné makro ohlašující chybu: například pomocí volání funkce FrmCustomAlert(), o které jsme psali v předchozím dílu.

Neočekávané situace v programu

Při běhu naší aplikace na počítači PalmOS musíme počítat s nejrůznějšími neočekávanými komplikacemi, které by mohly ovlivnit chování programu. Nedostatek paměti, nenalezená databáze nebo spuštění pod jinou verzí PalmOS, než kterou naše aplikace očekává, jsou jenom příklady problémů, se kterými se při běhu může náš program setkat.

Volání řady funkcí operačního systému PalmOS může skončit neúspěchem. Funkce, které mohou (z libovolného důvodu) selhat, se dělí do dvou skupin:

  • Funkce, které v případě selhání vrátí nesmyslnou hodnotu (například funkce MemPtrNew() vrátí v případě selhání hodnotu NULL).
  • Funkce, které vracejí nebo ukládají do proměnné kód chyby.

U první skupiny funkcí musíme v naší aplikaci pečlivě hlídat návratové hodnoty. Pokud k neočekávané situaci dojde, musíme ji přiměřeně řešit. V případě nedostatku paměti můžeme ukončit funkci nebo aplikaci; dojde-li k chybě, kterou můžeme napravit, napravíme-ji.

Boolean Testuj(Char* testovane)
{
    Char* pole = (Char*)MemPtrNew(1000);

    if(!pole)
    {
        return false;
    }

    StrCopy(pole, testovane);

    ...

    MemPtrFree((MemPtr)pole);

    return true;
}

K uložení čísla chyby se v operačním systému PalmOS používá 16bitový datový typ Err. Hodnota errNone znamená, že funkce pracovala bez chyb; ostatní hodnoty reprezentují číslo chyby. Každá součást operačního systému PalmOS (správce paměti, databáze) používá vlastní jedinečná čísla chyb.


Příště dokončíme povídání o chybách popisem chyb, které způsobuje uživatel, a začneme popis definice a ovládání seznamů.





Nejčtenější

Smartphony OnePlus sbírají a odesílají některá uživatelská data na servery v USA
Populární smartphony šmírují uživatele. Denně odešlou desítky MB dat

Matematik a softwarový inženýr Chris D. Moore si všiml podivného chování svého smartphonu OnePlus 2. Zjistil, že telefon sbírá až podezřele podrobné informace...  celý článek

Portfolio smartphonů Samsung
Devět letošních Samsungů, který je nejzajímavější?

Samsung letos na našem trhu uvedl celkem 9 různých modelů napříč řadami J, A, S a Xcover. Měli jsme v redakci unikátní příležitost nafotit je všechny pohromadě...  celý článek

iPhone 8 Plus
iPhony 8 nejdou na odbyt. Lépe se prodávají i loňské modely

O nové iPhony 8 není ve Spojených státech velký zájem. Dokonce se lépe prodává rok starý iPhone, který výrobce s nástupem modelu 8 zlevnil.  celý článek

Fidget spinner mobil pořídíte za asi 350 korun.
Hit letošního roku už můžete mít i jako mobil. Stojí několik stovek

Hračka původně určená k relaxaci, fidget spinner, je hitem letošního roku. Její slávy využil výrobce z Hongkongu, který do ní vtěsnal celý funkční mobil....  celý článek

ZTE Axon M
Výjimečný rozevírací smartphone je tu, ale konstrukce je zvláštní

Na rozkládací smartphony s ohebnými displeji se čeká už nějaký ten pátek. Nové ZTE Axon M sice přináší rozevírací koncepci, ovšem ohebný displej nemá. To...  celý článek

Další z rubriky

Simulovaná dopravní nehoda jako praktická ukázka fungování mobilní aplikace...
Záchranku volejte přes aplikaci. Pomoc je rychlejší než při volání na 155

„Záchranná služba, tísňová linka, dobrý den,“ ohlašuje se operátorka volajícímu, který se stal svědkem dopravní nehody. Obratem jej žádá o upřesnění místa,...  celý článek

Záchranná služba představila ve středu oficiální mobilní aplikaci, pomůže...
Aplikaci české záchranky používá už 330 tisíc lidí, čekají ji vylepšení

Aplikaci Záchranka, která v naléhavých případech umožňuje přivolat si pomoc přes mobil, čekají v dubnu inovace. Spustí se zdokonalené funkce pro neslyšící a...  celý článek

Ilustrační snímek
Na dovolené se můžete seznámit i nespálit

Na dovolenou si bereme kde co, ovšem počítač/notebook často zůstává doma. Ten je na jedné straně prostředkem k pohodlnému přístupu k informacím, na druhé pak k...  celý článek

Najdete na iDNES.cz



mobilní verze
© 1999–2017 MAFRA, a. s., a dodavatelé Profimedia, Reuters, ČTK, AP. Jakékoliv užití obsahu včetně převzetí, šíření či dalšího zpřístupňování článků a fotografií je bez souhlasu MAFRA, a. s., zakázáno. Provozovatelem serveru iDNES.cz je MAFRA, a. s., se sídlem
Karla Engliše 519/11, 150 00 Praha 5, IČ: 45313351, zapsaná v obchodním rejstříku vedeném Městským soudem v Praze, oddíl B, vložka 1328. Vydavatelství MAFRA, a. s., je členem koncernu AGROFERT.