2009-11-17 4 views
5

Ich hatte heute eine Ausnahme in einem Code: "A [eine Ausnahme] wurde nicht behandelt."Wie kann Code in einem "try ... catch" Block eine unbehandelte Ausnahme auslösen?

Allerdings war dieser Code eindeutig innerhalb des "versuchen" Block eines "try/catch" Struktur. hier

Was bin ich?

Update: Es ist C#

Update: Oh, es vergessen. Es stellt sich heraus, dass der spezifische Mechanismus des Fehlers darin besteht, dass ich ein Idiot bin. Es gibt keine Lösung dafür.

+3

Welche Sprache/Framework verwenden Sie? – stusmith

+0

Können Sie etwas Code posten? –

+0

Wenn Sie Ihren Code veröffentlichen, ist es möglicherweise einfacher, Ihr Problem zu diagnostizieren. –

Antwort

5

Ist die Aussage Fang eine bestimmte Art von Ausnahme angeben?

Ist dies der Fall, wird es nur diese Art von Ausnahme fangen.

+0

Ich fange "Ausnahme". Ist das nicht alles? – Deane

+0

Nicht unbedingt, versuchen Sie im Catch-Block überhaupt nichts anzugeben. –

2

Sind Sie in einem Debugger mit „bricht auf Ausnahmen“/„brechen auf geworfen“ eingeschaltet laufen? In diesem Fall wird die Ausnahme angezeigt, bevor sie an try/catch übergeben wird.

+0

Das war im Debugger, ja. Das könnte es sein. Ist das in Visual Studio eine Einstellung? – Deane

+0

Wenn du die Ausnahme bekommen konntest du weitermachen und dann in den Versuch gehen/fangen? Die Ausnahmeeinstellungen befinden sich normalerweise unter "Debug-> Exceptions". Abhängig von der Sprache gibt es verschiedene Dinge, die Sie tun können. –

1

Ich habe 10 Dollar, das sagt sein ein Threadabort oder eine andere Selbst werfen Ausnahme. Wenn dies der Fall ist, müssen Sie die Ausnahme zweimal abfangen.

0

Ohne die Sprache zu kennen ist es schwer zu sagen, aber viele Sprachen haben das Konzept von Ausnahmen, die nicht abgefangen werden können - zum Beispiel in .NET, OutOfMemoryException und ExecutionEngineException (unter anderem) können nicht abgefangen werden, da sie im Wesentlichen nicht wiederherstellbar sind .

3

Einige durch Rekursion verursachte Probleme, wie StackOverFlow-Exceptions und Ähnliches, werden in try ... catch-Blöcke geworfen, weil sie nicht von einer bestimmten Codezeile innerhalb des Blocks, sondern von der CLR geworfen werden. Dies gilt auch für Speicherüberschreitungen außerhalb des Bereichs und andere Probleme, die nicht das direkte Ergebnis einer einzelnen Codezeile sind.

Sie reden so etwas wie dies vielleicht:

alt text

4

Unmanaged Ausnahmen nicht durch catch (Exception e) gefangen werden, können Sie versuchen, eine

try 
    { 
    } 
    catch 
    { 
    } 

statt

 try 
     { 
     } 
     catch (Exception e) 
     { 
     } 
Verwandte Themen