Как избавиться от "... 1 more" и увидеть полный стек вызовов, приведших к выбросу исключения, если результатом выводится только это:
// other output data
myPack.DynamicFieldsException
at myPack.DynamicFields.setField(DynamicFields.java:69)
at myPack.DynamicFields.main(DynamicFields.java:99)
Caused by: java.lang.NullPointerException
at myPack.DynamicFields.setField(DynamicFields.java:70)
... 1 more
Просьба в ответе показать конкретный пример, т.е.
catch (MyException e) { ??? }
Какой код следует использовать вместо "???" чтобы получить желаемый результат (полный вывод стека) ?
Сейчас используется:
catch (MyException e) { e.printStackTrace(); }
Такой вариант:
catch (NoSuchFieldException e) {
for (StackTraceElement l : e.getStackTrace())
System.out.println(l);
}
не показывает причину, заранее заданную как new Exception(new Exception()); или как new MyException().initCause(new MyException());
Ответ
Этот способ вывода информации об исключении, является способом по умолчанию. Вот так это выглядит в коде
if (framesInCommon != 0)
s.println(prefix + "\t... " + framesInCommon + " more");
Но вы всегда можете перехватить исключение и вывести его в нужном вам формате. Метод getStackTrace вернет вам массив типа StackTraceElement. В нем вы найдете всю необходимую информацию о стеке.
try {
throw new Exception(new NullPointerException());
} catch (Exception ex) {
Throwable cause = ex;
while (cause != null) {
for(StackTraceElement element: cause.getStackTrace()) {
System.out.println(element.toString());
}
cause = cause.getCause();
if(cause != null) {
System.out.println("Caused by " + cause);
}
}
}
Комментариев нет:
Отправить комментарий