2012-12-01 69 views
13

是否可以將堆棧跟蹤打印到GWT中的字符串?使用的java.io中的類將無法工作,我的常用方法認爲,由於java.io包不可用客戶方(和作家,爲PrintWriter等都是在那個包)把堆棧跟蹤變成一個字符串?

謝謝

+1

讀這將是使問題更好,如果你可以提到你正在使用什麼測井技術你是以下在客戶端這GWT的版本。 – SSR

+1

你在說什麼堆棧跟蹤?編譯時間還是運行時間?如果是運行時,只需使用任何記錄器,或用try catch塊包圍你的代碼,並將異常堆棧跟蹤傳輸到你想要的任何字符串。 –

+0

嗨,運行時異常 - 我正在使用GWT 2.5。是的,我想將完整的堆棧跟蹤轉換爲字符串,然後可能將其顯示在標籤中。但是,我們如何才能獲得一個異常實例堆棧跟蹤爲一個字符串? – user291701

回答

10

我不知道,如果一個StackTraceElement是模擬的,但如果它是你可以運行類似

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

下面是我使用來獲取一個完整的堆棧跟蹤在GWT一個String方法:

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; 
} 
+1

這很好。但你如何使用StackTraceDeobfuscator? – confile

3

我不會推薦嘗試在GUI標籤中顯示錯誤堆棧跟蹤。

1)它們在GWT混淆後不可讀。他們只是看起來像一堆標籤對齊的新字符。

2)它們不是I18N格式。

3)正確的方法是正確顯示用戶良好的錯誤「消息」。 exception.getMessage()會給你一行非obf信息,這些信息應該爲用戶提供必要的用戶體驗交互。

4)如果你正在尋找well formed異常堆棧跟蹤有助於調試(不是用戶),你應該使用GWT的有據可查的記錄功能與網絡模式異常 -

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

B)同樣在http://code.google.com/p/google-web-toolkit/wiki/WebModeExceptions