При наблюдении StackOverflowError как получить полный стек вызовов?
Рассмотрим этот простой пример:
public class Overflow {
public Overflow() {
new Overflow();
}
public static void a() {
new Overflow();
}
public static void main(String[] argv) {
a();
}
}
Теперь сообщается об ошибке:
Exception in thread "main" java.lang.StackOverflowError
at Overflow.<init>(Overflow.java:11)
[last line repeated many times]
Но я не вижу метод main
и a
в трассировке стека. Я предполагаю, что это из-за переполнения, самая новая запись в стеке заменяет самую старую (?).
Теперь, как получить записи стека a
и main
на выходе?
В фоновом режиме я получаю StackOverflowError (но это не бесконечная рекурсия, потому что это не происходит при увеличении размера стека), и трудно обнаружить проблему в коде. Я получаю только несколько строк из java.util.regex.Pattern
, но не информацию, которую этот код назвал. Приложение слишком сложно установить точку останова при каждом вызове Pattern
s.