Kivételkezelés Delphi-ben
2002-08-13T14:22:31+02:00
2004-01-13T15:04:33+01:00
2022-07-19T06:52:55+02:00
  • mondom: ahogy meg van írva

    ott a forrás, meg lehet nézni jól

    d5
    Mutasd a teljes hozzászólást!
  • Lehet, hogy hülyeséget mondok, de a kivétel "dobás" az ez a fogalom, nem?
    (Ezt az eszkalációra írom. Ködös emlékeim vannak C++-ból)

    Amúgy, nem pontosan a témába vég, de azért érinti:
    ADO-n keresztül használok MSSQL-t és az exception object, message-ében csak a hibaüzenet első sora van. Valahogy vissza lehet nyerni a SQL szervel által küldött összes hibaszöveget/paramétert, vagy azt egyszerüen lenyeli az ADO?
    Mutasd a teljes hozzászólást!
  • Meg akkor sem ha
    - nem a főszálban keletkezik
    - ha a VCL üzenetkezelő ciklusán kívül keletkezik (gyakorlatilag az Application.Run előtt v. után)
    Mutasd a teljes hozzászólást!
  • Az ApplicationEvents.OnException eseménye sem működik minden esetben.


    Az pont úgy működik, ahogy meg van írva. Ha egy kivétel eszkalálódik alkalmazás szintre, akkor ez kezeli le. Ha korábban lekezeli valaki, akkor nem hívódik meg.

    d5
    Mutasd a teljes hozzászólást!
  • Hogyan lehet az egész programban jelentkező kivételeket lekezelni, naplózni, stb?
    Az ApplicationEvents.OnException eseménye sem működik minden esetben.
    -dj-
    Mutasd a teljes hozzászólást!
  • Na ja, ha az exe - t indítom, akkor megy a dolog, de ha f9 - cel delphi alól akkor a delphi kezeli le, és ez kicsit idegesítő

    Kicsit alaposabban kellene olvasnod!

    Nyomjál egy F9-et akkor amikor a Delphi feldobja a kivételt, és máris tovább fog menni a programod, és ha van except-ed, akkor az is végre fog hajtódni.

    Egyébként ha pedig egy adott típusú kivételt akarsz kizárni, akkor használhatod a a Language Exceptions fülön az "Exception Types to Ignore" listát is. Az ott megadott típusú kivételeken nem fog megállni a Delphi még ennyire sem...
    Mutasd a teljes hozzászólást!
  • Na ja, ha az exe - t indítom, akkor megy a dolog, de ha f9 - cel delphi alól akkor a delphi kezeli le, és ez kicsit idegesítő
    Mutasd a teljes hozzászólást!
  • IntToStrDef :)
    Mutasd a teljes hozzászólást!
  • Nem egészen. Az exception mindenképp kiváltódik és az except on ... ágra kerül, csak előbb a Delphi saját kivételkezelése is elindul ha nincs lekapcsolva a break on exception. Picit engem is idegesít, ezért jobban is szeretem a val-t használni erre a célra.
    Mutasd a teljes hozzászólást!
  • Na jó, de ha pl. egy edit textjét akarom konvertálni (inttostr()), és betűket írok az editbe, akkor a delphi megfogja a dolgot és nem az én lekezelésem történik.

    try i := inttostr(edi1.text);
    except on ecomverterror do
    begin
    showmessage('Nem számadat');
    end;
    end;

    Olyan mintha be sem gépeltem volna...
    Mutasd a teljes hozzászólást!
  • A régi hozzászólások között már felvetették, hogy a kivételkezeléshez ki kell iktatni a delphi saját kezelését, különben nem veszi figyelembe, amit beír az ember.

    Na, ezt jól félreértetted, bár pBoy szépen elmagyarázta, hogy semmi ilyesmiről nincs szó. Csak alapállapotban a debuggerben mindenképpen megjelenik a kivétel akkor is, ha van except kód hozzá. Ettől függetlenül azonban még utóbbi is lefut ha nyomsz egy F9-et, és az egész kizárólag azt a célt szolgálja, hogy az elnyomott kivételekről is értesülj fejlesztés közben.

    Ha jól emlékszem van vali direktíva

    Rosszul emlékszel. Legalábbis én nem tudok ilyenről.
    Mutasd a teljes hozzászólást!
  • Hahó!

    A régi hozzászólások között már felvetették, hogy a kivételkezeléshez ki kell iktatni a delphi saját kezelését, különben nem veszi figyelembe, amit beír az ember. Csakhogy ha a tools/debugger... részben kapcsolom ki, akkor az mindenre vonatkozik. Ha jól emlékszem van vali direktíva, amivel forráskódból lehet az adott alkalmazásra vonatkozóan kikapcsolni a beépített kivételkezelést. Melyik ez?
    Mutasd a teljes hozzászólást!
  • Eccerű a megoldás:
    Az első használatnál
    zárójelben írd oda, mit is jelent a szó. a többi helyen pedig használd bátran. Vagy ez nem jó megoldás?
    Mutasd a teljes hozzászólást!
  • >Persze ha valakinek van jobb javaslata, mint >az "eszkaláció", akkor várom - én nem találtam.

    Talán: felfutás.


    Mutasd a teljes hozzászólást!
  • Te magad is használtad a szövegben a kiváltás szót, nem tudom miért nem volt jó a többi helyen.

    Azért nem, mert a "kiváltás" nem ekvivalens az "eszkaláció"-val. Sőt, igazából közük nincs egymáshoz. Vagy Te mindent egy szóval mondasz el?
    Mutasd a teljes hozzászólást!
  • Te magad is használtad a szövegben a kiváltás szót, nem tudom miért nem volt jó a többi helyen.
    Mutasd a teljes hozzászólást!
  • Köszönöm pBoy!
    Ez volt a megoldás!
    Mutasd a teljes hozzászólást!
  • Nana. Stop on Delphi exceptions bekapcsolva a Tools | Debugger Options | Language Exceptions alatt ugye a baj?

    Ha bekapcsolt, akkor a Delphi debugger elöbb szól neked. Ha kikapcsolt, akkor nem szól. Csak ennyi a különbség.

    Try it
    Mutasd a teljes hozzászólást!
  • Üdv! Szeretném a segítségeteket kérni. Kivételt kezelnék Delphi6 alatt, de ő ezt nem hajlandó tudomásul venni. Egyszerűen nem veszi figyelembe a programrészt, ami azt jelenti, hogy a gyári kivétel lefut adja a hibaüzenetet, pedig hát ott van az ÉN kivételkezelő eljárásom. Most kipróbáltam egy külön projekt alatt egy tankönyv eljárását, és ugyanazt csinálja (nem csinálja). Arra gondolok, hogy valahol a beállítások közt valamit ki kell pipálni, de igazán nem tudom, mi lehet a baj. A begépelt kód:procedure
    TForm1.Button1Click(Sender: TObject);
    var
    osszeg: real;
    begin
    try
    osszeg := StrToFloat(edit1.Text);
    except
    on econverterror do
    showmessage('Nem Jó!');
    end;
    end;
    Mutasd a teljes hozzászólást!
  • Egy cikk valóban nem attól lesz jó, hogy sok idegen szó van benne (sőt, azt szokás mondani, hogy minél jobban ért valamihez az ember, annál kevesebb idegen szóra van szükséges annak leírásához), viszont amikor nincs megfelelő magyar szó a fogalomra, akkor célszerű az eredeti kifejezést használni. Persze ha valakinek van jobb javaslata, mint az "eszkaláció", akkor várom - én nem találtam.

    Az eszkaláció egyébként itt konkrétan a kivétel "kiterjesztését", a kivételkezelők struktúrájában a magasabb szintek felé továbbítását, pontosabban ennek folyamatát jelenti.
    Mutasd a teljes hozzászólást!
  • Tetszik a cikk, de azért valaki mondja meg már nekem, mit jelent az "eszkaláció" szó ? Én lennék ennyire műveletlen, hogy soha nem hallottam? Mindenesetre ajánlanám a cikk írójának, hogy - ahol lehet persze, tekintettel a témára - próbálja az idegen szavak magyar megfelelőjét használni. Nem attól lesz egy leírás jó, hogy tele van tömve érthetetlen idegen szavakkal...
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd