Sie verwenden wahrscheinlich die HotSpot JVM (ursprünglich von Sun Microsystems, später von Oracle aufgekauft, Teil des OpenJDK), die viele Optimierungen vornimmt. Um die Stack Traces zurückzubekommen, müssen Sie die Option -XX:-OmitStackTraceInFastThrow
an die JVM.
Die Optimierung besteht darin, dass beim erstmaligen Auftreten einer Ausnahme (in der Regel eine NullPointerException) der vollständige Stack-Trace gedruckt wird und die JVM sich den Stack-Trace (oder vielleicht nur den Ort des Codes) merkt. Wenn diese Ausnahme oft genug auftritt, wird der Stack-Trace nicht mehr ausgegeben, um eine bessere Leistung zu erzielen und das Protokoll nicht mit identischen Stack-Traces zu überfluten.
Um zu sehen, wie dies in der HotSpot JVM implementiert ist, sich eine Kopie davon besorgen und suchen Sie nach der globalen Variable OmitStackTraceInFastThrow
. Das letzte Mal, als ich mir den Code ansah (im Jahr 2019), befand er sich in der Datei graphKit.cpp .