Vous utilisez probablement la JVM HotSpot (à l'origine par Sun Microsystems, plus tard achetée par Oracle, faisant partie de l'OpenJDK), qui effectue beaucoup d'optimisation. Pour récupérer les traces de pile, vous devez passer l'option suivante à la JVM :
-XX:-OmitStackTraceInFastThrow
L'optimisation consiste à faire en sorte que lorsqu'une exception (typiquement un NullPointerException
) se produit pour la première fois, la trace de pile complète est imprimée et la JVM se souvient de la trace de pile (ou peut-être simplement de l'emplacement du code). Lorsque cette exception se produit suffisamment souvent, la trace de pile n'est plus imprimée, à la fois pour améliorer les performances et pour ne pas inonder le journal avec des traces de pile identiques.
Pour voir comment cela est mis en œuvre dans la JVM HotSpot, en obtenir une copie et rechercher la variable globale OmitStackTraceInFastThrow
. La dernière fois que j'ai regardé le code (en 2019), il se trouvait dans le fichier graphKit.cpp .
0 votes
Quel est le contexte ? Y a-t-il plusieurs fils impliqués ? J'ai eu des problèmes en essayant d'obtenir la trace de pile d'une exception dans un SwingWorker.
0 votes
Il n'est pas question ici de threading, mais simplement de Java.
1 votes
@Bozho - non - je ne sais pas encore comment reproduire le NullPointer.
1 votes
Connexes : stackoverflow.com/questions/1076191/
0 votes
Plus d'informations sur
-XX:-OmitStackTraceInFastThrow
dans le dup : stackoverflow.com/questions/4659151/