A first chance exception of type 'System.Data.SqlClient.SqlException' occurred in System.Data.dll
Přiznám se, že jsem se s tím ještě nesetkal, začal jsem hledat na internetu. Když je v systému poprvé vyvolána výjimka, nazývá se First chance exception. To je poprvé, kdy Vám dá systém šanci na výjimku zareagovat a obsloužit ji. Pokud je přiřazen k této výjimce handler, pak je volán právě v tuto chvíli. Pokud je spuštěn debugger, pak také dostane šanci se s výjimkou vypořádat. Pokud není nikdo, kdo by výjimku obsloužil, pak nastane Second chance exception, která s největší pravděpodobností ukončí aplikaci.
I když Vaše aplikace běží vpořádku, tak jak se očekávalo, pod pokličkou nastávají nebo mohou nastávat výjimky. Dejme tomu, že v kódu voláte metodu IsDate, která jako argument bere string a vrací true nebo false, pokud lze tento string parsovat na DateTime. Tato metoda je implementována zhruba takto:
public bool IsDate(string s)
{
try
{
DateTime dt = DateTime.Parse(s);
return true;
}
catch(Exception e)
{
return false;
}
}
Výjimka je tedy ošetřena v rámci tohoto kódu. Není delegována do aplikace a v Output okně debuggeru je zaznamenána jako First chance exception. Oznamování výjimek můžeme ve Visual Studiu nastavit. Základní nastavení je takové, že debugger nám dá vědět pouze v případě, kdy výjimka není obsloužena, ale můžeme nastavit, že chceme vědět o všech výjimkách.
Za následek to ale bude mít, že nás debugger doslova otravuje s výjimkami, které nás nezajímají (viz. zmíněný případ s metodou IsDate). Máme také možnost nastavit různé chování pro různé druhy výjimek (.NET, CLR, Win32 apod.).
Obecně nejsou First chance exception (FCE) nebezpečné a většinou nejde o chybu ve Vašem kódu. Je však dobré vědět proč v tom a tom místě nastávají. Díky sledování výskytu FCE se mi podařilo odhalit několik chyb, které byly v mém kódu, ale zanikly ve špatně odchycených výjimkách.
Žádné komentáře:
Okomentovat