Angenommen, ich habe die folgende Situation:
%Vor%Ich starte es und habe folgende Ausgabe:
%Vor%Wenn ich das Kommentarzeichen auslasse, wird eine neue Exception geworfen ("Case 1"); Die Ausgabe ist:
%Vor%Meine Frage ist also, warum ich im ersten Fall den vollständigen Pfad einschließlich der Hauptfunktion sehen kann, während ich im zweiten Fall nicht dasselbe sehe. Wie kann ich die vollständigeren Informationen anzeigen, wenn der Produktionscode dem zweiten Fall ähnlich ist?
Im ersten Fall führen Sie einen weiteren Methodenaufruf für die anonyme Methode aus, die in der Methode Main
definiert ist. Da die Ausnahme in der anonymen Methode ausgelöst wird, ist sie in der Aufrufliste enthalten.
Wenn Sie die Ausnahme in der WrapperMethod
-Methode auslösen, ist die anonyme Methode niemals beteiligt, daher wird sie nicht im Aufruf-Stack angezeigt.
Was Sie in Ihrem Stack-Trace sehen, ist der generierte Name des Compilers für die anonyme Funktion, die Sie in WrapperMethod übergeben. Es gibt keine Möglichkeit, in dieser Situation einen "schöneren Namen" zu erhalten, ohne anonyme Funktionen zu verwenden.
Wenn Sie das jedoch wissen, sollte es nicht schwierig sein, den verstümmelten Stack Trace "mental zu analysieren". Sie können die anonyme Funktion anhand ihres Namens erkennen, der etwa so aussieht wie <Main>b__0()
, und Sie können erkennen, dass sie in der Program
-Klasse deklariert wurde, da der Compiler sich entschieden hat, die Funktion zu generieren.
Sie verlieren keine Stapelinformationen. Wenn eine Ausnahme in WrapperFunction geworfen wird, ist dies der oberste Stapelrahmen. Wenn eine Ausnahme in einer von WrapperFunction aufgerufenen Methode ausgelöst wird, befindet sich die (in diesem Fall eine anonyme) Methode im Stapel oben.