HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Exceptions dialógusablak használata


Példaprogram letöltése

9796 bájt

Cikkünkben egy talán kevésbé ismert, ám bizonyos esetekben igen hasznos szolgáltatásával ismerkedünk meg a Visual Studio.NET rendszernek, amely az alkalmazásfejlesztés hibakereső fázisához kapcsolódik. Segítségével utasíthatjuk a futtatórendszert arra, hogy ha az alkalmazásban valamilyen előre deklarált osztályú kivétel keletkezik, akkor DEBUG módban hogyan kezelje azt.

A mellékelt példa fordítása után a MyException osztálykönyvtár .DLL állományát be kell másolni a .NET osztálykönyvtárait is tartalmazó rendszermappába, mely alapértelmezésben a „%systemroot%:\winnt\Microsoft.NET\Framework\%verziószám%„ helyen található.
A Visual Studio.NET fejlesztőrendszer igen nagy precizitással kidolgozott hibakereső mechanizmusa kiegészült egy olyan funkcióval, amely a fejlesztők kezébe adja annak eldöntését, hogy az alkalmazásban keletkezett kivételes állapotokat a rendszer hibakereséskor milyen módon kezelje. Ez azt jelenti, hogy a fejlesztő egyéni hibakezelési módot rendelhet a kivételek osztály-csoportjaihoz, vagy akár minden egyes osztályhoz.
A funkció eléréséhez a keretrendszer Debug menüpontja alatt megtalálható Exceptions almenüpontra kell kattintani, melynek eredményeként felbukkan egy Exceptions fejléccel rendelkező ablak, ahol a fent említett utasítások kiadhatók.


Az ablak fa-struktúrájában jelenik meg az a négy kivétel csoport, mely a különböző alkalmazások futása során esetleg bekövetkező kivételes állapotokat tartalmazza.
A C++ Exceptions kategóriába természetesen a C++ nyelven megírt alkalmazások kivételei tartoznak, többek közt a MFC osztálykönyvtár CException ősosztály által implementált kivételek. A Native Run-Time Checks és a Win32 Exceptions kategóriákba a futási idejű, memóriafoglalásokkal összefüggő, illetve az operációs rendszer által generált kivételeket találjuk meg nevesítve.


A negyedik csoportot feltárva, vagyis a Common Language Runtime Exceptions csomópontot kibontva egyértelműen szembetűnik, hogy ide tartoznak a .NET Class Library névtereibe tartozó, különböző osztályú kivétel elemek. A rendező elv, vagyis a névtérbe tartozás itt is nyomon követhető, a fán valamennyi kivétel-osztály fellelhető. Az egyes kivételek nevei előtt kis piktogramokat láthatunk, melyek – ahogy később azt látni fogjuk – mind alakjukban, mind színükben igazodnak a fejlesztő által eszközölt beállításokhoz. De lássuk, mik is lehetnek ezek a beállítások.
A felületen a fa-struktúra alatt két rádiógomb csoportot láthatunk, melyekkel elvégezhetjük a testre szabást, vagyis az adott kivételt kijelölve és a megfelelő rádiógombra kattintva meghatározhatjuk az ehhez kapcsolódó viselkedést. Mindkét rádiógomb csoportban azonos műveletek végezhetők el, illetve adhatók meg, csak ezek elvégzése más időpillanathoz kapcsolódik. A csoportok műveleteinek mindegyikére igaz, hogy csak az adott kivétel esetén használható művelet látható, a többi művelet letiltott állapotban van.
A ’When the exception is thrown’ csoportban található rádiógombok segítségével megadott műveletek – melyek csak egy kivétel-individuumhoz és nem egy csoporthoz kapcsolhatók, - akkor következnek be, vagyis a futtatórendszer akkor végzi el azokat, amikor az ily módon megjelölt kivétel bekövetkezik (dobódik), de még mielőtt a program kódjában elhelyezett kivételkezelő (try-catch-finally) kódrészletnek lehetősége volna kezelni azt.
Az ’If the exception is not handled’ csoportban megtalálható rádiógombok segítségével magadott műveletek akkor következnek be, amikor a dobott kivételt a programban megvalósított kivételkezelő megpróbálta kezelni, ez azonban kudarccal végződött, és a művelet sikertelenül véget ért.


A két művelet csoportba tartozó három művelet a következő:
  • Break into debugger
A megoldást választva gondoskodunk a kivétel normális kezeléséről, vagyis arról, hogy DEBUG-olva alkalmazásunkat a kivétel keletkezésekor hibaüzenet jelenik meg, mely közli a hiba előfordulását, valamint helyét.
Ilyenkor a fejlesztő feladata kezelni a hibát, elkapni a kivételt. Ezt a műveletet választva a kivétel csomópontja mellett egy piros kör jelenik meg egy ’x’ jellel a közepén.
  • Continue
A műveletet választva utasíthatjuk a futtatórendszert, hogy mindennemű jelzés nélkül ugorja át a kivételt generáló kódsort, és folytassa a hibakereső művelet végrehajtását, mintha nem is történt volna semmi. A kivétel neve mellett az alapértelmezett szürke gömb megnagyobbodik, ha ezt a műveletet választjuk.
  • Use parent setting
A művelet egy olyan beállítást jelent, melyben a futtatórendszer a kivétel osztályának ősosztálya esetén megtett beállításokat veszi figyelembe, vagyis ezeket a beállításokat örökíti át a gyermek kivételre. Ekkor a szürke gömb mérete lecsökken.


A felület Find gombjára kattintva lehetővé válik, hogy a kivételre nevével hivatkozva megkeressük azt a fa-szerkezetben, amennyiben nem tudjuk pontosan, hogy milyen névtérbe tartozik.


A rendszer lehetőséget ad arra is, hogy a fejlesztő az általa deklarált kivétel osztályt is felvehesse erre a listára, és a fent említett kezelőmetódusokat arra is kiterjessze. Ehhez a felület Add gombjára kell kattintani, és a megjelenő ablakban meg kell adni a kivétel osztály nevét. A funkció csak önálló .DLL-ben megvalósított kivétel osztályokra vehető igénybe, a futtatható kódot tartalmazó állományban elhelyezett deklarációra nem.


A mellékelt osztályban modelleztük a keretrendszer utóbb említett lehetőségét. Az alkalmazás mappájának MyException alkönyvtárában elhelyeztünk egy osztály-könyvtár implementációt, melyet lefordítva egy .DLL-t kapunk, benne egy MyException nevű osztály deklarációjával. A létrehozott osztály az ApplicationException osztályból származik, konstruktorának paraméterében kell megadni létrehozáskor a megjelenő hibaüzenet szövegét.


public class MyException : ApplicationException
{
  public MyException(string msg):base(msg)
  {
  }
}
A felületen található ’Delete’ gombbal törölhetők a létrehozott bejegyzések, valamint a ’Clear All’ gombbal a beállítások visszarendezhetők alapértelmezett értékeikre.
Az alkalmazás futtatásakor a felületen található két gombbal válthatunk ki kétféle kivételes állapotot. A kivételeket nem kezeljük, hogy DEBUG módban tesztelhessük a futtatórendszer viselkedését. Az egyik kivételes állapot System.IO.FileNotFoundException, míg a másik MyException típusú. Azt tapasztalhatjuk, hogy a ’Continue’ rádiógombot választva a művelet-csoportokban, a hibakereső átsiklik a kivételt generáló kódsorokon, majd több művelet nem lévén egy-egy gomb kezelőfüggvényében, a rendszer visszatér szerkesztőmódba, és a hibakeresés véget ér.
A ’Break into debugger’ műveletnél viszont a szokásos módon megjelenik az üzenetpanel a tájékoztató szöveggel, mindkét kivételes állapot bekövetkezésekor. A rendszer akkor tudja figyelembe venni az Exceptions dialógusablakban megadott osztályunkat, ha annak DLL-állománya megtalálható a .NET-állományok mappájában, a fent említett helyen. A műveletek nem működnek ellenkező esetben.



Cikksorozat

#IDKategóriaCikk címeSorozat
1621DelphiMySQL szerverek elérése Delphi-ből1. rész
1632DelphiMySQL szerverek elérése Delphi-ből2. rész
1641DelphiMySQL szerverek elérése Delphi-ből3. rész
1649DelphiMySQL szerverek elérése Delphi-ből4. rész


Könyv
Ez a cikk megtalálható ebben a könyvben: C# Software Offline 2003 évkönyv 40. oldal

Felhasználási feltételek
A Software Online szoftverfejlesztői magazin mindegyik cikke, minden megjelent képe, és egyéb publikált anyaga szerzői jog védelme alatt áll! Bármilyen formában történő másodlagos terjesztésük, közzétételük vagy felhasználásuk kizárólag a kiadó előzetes írásbeli engedélyével történhet!

Copyright © 1999-2012 Animare Software Kft. Minden jog fenntartva!
| Készült: Animare Stúdió | Adatvédelem | Kapcsolat |