Ausnahme gefangen ist null selbst !
Habe ich eine ASP.NET Anwendungen. Alles war in Ordnung, aber in letzter Zeit bekomme ich exceptions, die null sind sich:
try
{
//do something
}
catch (Exception ex)
{
Logger.Log("Error while tried to do something. Error: " + ex.Message);
}
Manchmal ex
ist null
selbst !
Irgendeine Idee?
- ex oder ex.Nachricht?
- Die Chancen sind es nicht die Ausnahme, die null aber der compiler kann optimieren, einige der rest von dem code, der bewirkt, dass Ihr Ausnahme erscheinen an anderer Stelle. Können Sie fügen Sie alle Ihre tatsächliche code?
- Auch, haben Sie verengt das Problem auf etwas konsistenter, was geschieht, wenn man den null-ex (oder null, ex.Nachricht)?
- Vielleicht
Logger
null ist? ex
istnull
. Ich legte es einBreak Point
und ich bin sicher, es istex
.- Es ist völlig unmöglich, für diese zu passieren, es sei denn, Sie schreiben
ex = null;
vorher. - Wo haben Sie den Haltepunkt? wenn in der 'catch' - Zeile dann bewegen Sie den Mauszeiger möglicherweise tatsächlich null. Sie benötigen zum ausführen des codes im catch-Anweisung, um die Referenz der Ausnahme von ex.
- Haben Sie den breakpoint auf die catch-line? Wenn du das getan hast dann ex wird null sein, da es noch nicht wirklich zu laufen, das Stück code noch. Legen Sie den Haltepunkt in der Logger-line dann schauen Sie auf den Wert ex.
- Sie Recht. Es war der compiler. Ich Frage es in einer anderen Frage, warum manchmal (ohne jede änderung) debugger sagt, dass ein Modul optimiert hat.
- Wie hast du die Adresse? Ich habe gerade festgestellt das gleiche problem. Hier ist ein Screenshot. flickr.com/photos/7200684@N02/7521732858/in/photostream
- Hoffe, dass meine Antwort auf diese quest, die Euch helfen können. stackoverflow.com/a/18508670/731894
Du musst angemeldet sein, um einen Kommentar abzugeben.
Für alle enden hier, die ich gefunden habe, eine Instanz, wo dies möglich ist (Wenn nur nachweisbar in den debugger). VS2013 Update 4.
Gebrochen:
Die Lösung ist, die Namen Ihrer Ausnahme-Variablen anders.
Behoben:
throw new InvalidOperationException()
in dietry
Klausel, die das Problem nicht auftreten.In meinem Fall war die Ursache eine StackOverflowException. Solche Ausnahmen von der Regel nicht erreichen, wird der catch-block, aber dieses mal, aus irgendeinem Grund, den ich nicht verstehe, es hast erreichen, wird der catch-block, aber die Ausnahme war null.
Nicht passieren.
Wenn Sie
throw null
werden, erhalten Sie eineNullReferenceException
von derthrow
; die Ausnahme in dercatch
block kann nienull
.Haben Sie etwas anderes, die
null
.null
irgendwie. Ich denke das es schon möglich zu werfen, Klassen, die nicht abgeleitetException
. Aber ich wäre überrascht, wenncatch(Exception ex)
fangen würde, solchenull
Ausnahme.NullReferenceException
. Ich habe gerade versucht mir selbst.throw
die Ausnahme. Auch ich habe eineBreak Point
es undex
war null. Vielleicht ist es nicht einCLR
Problem und es ist dieVisual Studio 2010
.web.config
unterhttpErrors>
und legte eine<clear/>
als der erste Knoten und dann<error statusCode="400" responseMode="Redirect" path="Error.aspx?Code=400"/>
aber ich bemerkte es, nachdem dieses problem.web.config
hat nichts zu tun mit dem problem aller Wahrscheinlichkeit nach.Ich lief in ein Problem, wo jemand war vorbei
ex.InnerException
auf eine Methode, woex
war die Wurzel. Da der parameter wurde auch alsex
es führte zu einige Verwirrung in den debugger, wenn ich schaute auf die ursprünglich Ausnahme gefangen. Dies war wahrscheinlich das Ergebnis von ein paar sorglose refactoring.z.B.:
Diese wurde umgestaltet als solche:
Exception ex
und das innere war auch, und null zurückgeben.Ich traf das gleiche problem, und der Grund ist: die Ausnahme ist eine NullReferenceException, so können Sie nicht mit ex.Nachricht, und Sie sollten versuchen, die fließen:
NullReferenceException
wird nicht mit einem null -Message
.