15

是否可以将堆栈跟踪打印到 GWT 中的字符串?我认为在 java.io 中使用类的常用方法不起作用,因为 java.io 包在客户端不可用(并且 Writer、PrintWriter 等在该包中)

谢谢

4

4 回答 4

13

我不确定 StackTraceElement 是否被模拟,但如果是,你可以运行类似的东西

for (StackTraceElement element : exception.getStackTrace()) {
    string += element + "\n";
}
于 2012-12-03T04:32:05.253 回答
9

这是我用来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;
}
于 2012-12-03T12:41:32.027 回答
3

我不建议尝试在 GUI 标签中显示错误堆栈跟踪。

1) 在 GWT 混淆后它们不可读。它们看起来就像新行上的一堆制表符对齐的字符。

2) 它们不是 I18N 格式。

3)正确的方法是只向用户显示格式正确的错误“消息”。exception.getMessage() 将为您提供一行非 obf 信息,该信息应为用户提供必要的 UX 交互。

4)如果您正在寻找well formed有助于调试的异常堆栈跟踪(而不是用户),您应该使用 GWT 的有据可查的日志记录功能和 Web 模式异常 -

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

b) 另请阅读http://code.google.com/p/google-web-toolkit/wiki/WebModeExceptions

于 2012-12-03T14:10:24.850 回答
1

使用com.google.gwt.logging.impl.StackTracePrintStream

Throwable t = ...;
StringBuilder message = new StringBuilder();
StackTracePrintStream ps = new StackTracePrintStream(message);
t.printStackTrace(ps);
ps.flush();
于 2018-08-06T11:07:23.100 回答