Ausnahme ohne Stack-Trace - wie?

Wir haben einen Service, der unbehandelte Ausnahmen auf der Ebene der App-Domain protokolliert (über Log4net).

Wir haben protokolliert:

2014-01-28 16: 49: 19,636 FEHLER [49] FeedWrapperService - nicht behandelt System.NullReferenceException: Der Objektverweis wurde nicht auf eine Instanz eines Objekts festgelegt.

Diese Ausnahme hat keine Stapelverfolgung. Wie ist das möglich, ohne ein paar verrückte Dinge an dem Ausnahmeobjekt zu tun?

Unser Bearbeitungscode:

AppDomain.CurrentDomain.UnhandledException += LogAnyExceptions;

private void LogAnyExceptions(object sender, UnhandledExceptionEventArgs e)
{
    log.Error("unhandled", (Exception)e.ExceptionObject);
    throw (Exception)e.ExceptionObject;
}

Mir fällt ein, dass das erneute Werfen hier sinnlos ist, da die AppDomain ohnehin mit dem Prozess herunterfällt, aber ich denke, es hat keinen Einfluss auf unsere Situation.

Die Windows-Anwendungsereignisanzeige zeigt auch nur diese Nullreferenzausnahme und keine Ablaufverfolgung an.

Ich habe die Protokollierung des Ausnahmebehandlungsprogramms getestet und es protokolliert erfolgreich den Stack-Trace und alle inneren Ausnahmen. Wenn es von unserem Code geworfen wurde, würden wir einen Stack-Trace sehen. Wenn es von der C # -Bibliothek eines Drittanbieters ausgelöst wurde, wird wiederum eine Stapelablaufverfolgung für mindestens eine Methode angezeigt (unabhängig davon, ob es sich um eine erneut ausgelöste Ausnahme handelt oder nicht). Hier sehen wir eine verwaltete Ausnahme ohne Stack-Trace. Ich weiß nicht, wie das möglich ist.

Betrachtet man die dekompilierte Drittanbieter-Bibliothek, spricht sie mit nicht verwaltetem Code, und das Ereignis, das diese Ausnahme auslöste, ist wahrscheinlich in nicht verwaltetem Land. Aber wie könnte eine solche Situation eine verwaltete Nullreferenz-Ausnahme ohne Stacktrace verursachen?

Die Ursache dieses Problems ist zeitweise. Wir haben diesen Code seit mehreren Monaten in der Produktion ausgeführt und dies einmal gesehen. Es ist ziemlich verrückt.

Der allgemeine Konsens ist, dass das System, das für diese Art von Problem verantwortlich ist, in einen untergeordneten Prozess verschoben werden sollte, damit wir das Problem lösen und sicher und automatisch neu starten können, aber es wäre schön zu wissen, was los ist.

Bearbeiten, um Kommentarinformationen von unten einzuschließen:

Meine Ausnahme ist kein Standard-Re-Throw, da der Stack-Trace entweder null oder leer ist. Es enthält nicht den Namen der Rückwurfmethode. Wenn Sie weiter graben, kann die Exception-Klasse aus serialisierten Informationen erstellt werden, und es sieht so aus, als ob die serialisierten Informationen Nullzeichenfolgen für die Stapelverfolgung enthalten könnten, die möglicherweise erstellt werden könnten, ohne andere Fehler zu verursachen. Ich denke, es könnte von dort kommen, aber ich weiß nicht, wie es entstanden ist.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage