Полный путь к точке выброса исключения

201
20 июня 2017, 23:36

Как избавиться от "... 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());

Answer 1

Этот способ вывода информации об исключении, является способом по умолчанию. Вот так это выглядит в коде

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);
        }
    }
}
READ ALSO
Как учесть обновление приложения?

Как учесть обновление приложения?

Собираюсь выложить приложение на PlayMarket, с последующим его обновлением

226
Как передать коллекцию из Thymeleaf в контроллер?

Как передать коллекцию из Thymeleaf в контроллер?

Добрый день возникла такая проблема

333
Проверка всех точек вокруг заданной на совпадение с оной с различным шагом

Проверка всех точек вокруг заданной на совпадение с оной с различным шагом

Есть массив точек созданных на основе BufferedImage методом:

199