Подтвердить что ты не робот

Повернуть трассировку стека в строку?

Можно ли распечатать трассировку стека в строку в GWT? Обычные методы использования классов в java.io не будут работать, я думаю, потому что пакет java.io недоступен clientide (и Writer, PrintWriter и т.д. В этом пакете).

Спасибо

4b9b3361

Ответ 1

Я не уверен, что StackTraceElement эмулируется, но если это вы можете запустить что-то вроде

for (StackTraceElement element : exception.getStackTrace()) {
    string += element + "\n";
}

Ответ 2

Вот метод, который я использую, чтобы получить полную трассировку стека как String в GWT:

private static String getMessage (Throwable throwable) {
    String ret="";
    while (throwable!=null) {
            if (throwable instanceof com.google.gwt.event.shared.UmbrellaException){
                    for (Throwable thr2 :((com.google.gwt.event.shared.UmbrellaException)throwable).getCauses()){
                            if (ret != "")
                                    ret += "\nCaused by: ";
                            ret += thr2.toString();
                            ret += "\n  at "+getMessage(thr2);
                    }
            } else if (throwable instanceof com.google.web.bindery.event.shared.UmbrellaException){
                    for (Throwable thr2 :((com.google.web.bindery.event.shared.UmbrellaException)throwable).getCauses()){
                            if (ret != "")
                                    ret += "\nCaused by: ";
                            ret += thr2.toString();
                            ret += "\n  at "+getMessage(thr2);
                    }
            } else {
                    if (ret != "")
                            ret += "\nCaused by: ";
                    ret += throwable.toString();
                    for (StackTraceElement sTE : throwable.getStackTrace())
                            ret += "\n  at "+sTE;
            }
            throwable = throwable.getCause();
    }

    return ret;
}

Ответ 3

Я бы не рекомендовал пытаться отображать трассировку стека ошибок в метке GUI.

1) Они не читаются после обфускации GWT. Они выглядят как пучок выровненных по вкладкам символов над новыми строками.

2) Они не в формате I18N.

3) Правильный способ - это просто показать пользователю хорошо сформированную ошибку "Сообщение". exception.getMessage() предоставит вам одну строку информации, отличной от obf, которая должна обеспечить пользователю необходимое взаимодействие UX.

4) Если вы ищете well formed исключение stacktrace, полезное для отладки (не для пользователя), вы должны использовать хорошо зарегистрированную функцию ведения журнала GWT с исключениями в веб-режиме -

a) https://developers.google.com/web-toolkit/doc/latest/DevGuideLogging

b) Также читайте на http://code.google.com/p/google-web-toolkit/wiki/WebModeExceptions