2015-01-04 159 views
3

我有這樣的代碼來處理未捕獲的異常與GWT:打印堆棧跟蹤obfusated

GWT.setUncaughtExceptionHandler(new GWT.UncaughtExceptionHandler() { 
     @Override 
     public void onUncaughtException(Throwable throwable) { 
      // Iterate over the trace and then print with $wnd.console.log 
      printStackTrace(throwable.getStackTrace()); 
     } 
    }); 

然而,在瀏覽器控制檯打印日誌看起來是這樣的:

"Unknown.Ol(Unknown Source) 
Unknown.Nl(Unknown Source) 
Unknown.Vl(Unknown Source) 
Unknown.Hu(Unknown Source) 
Unknown.Ku(Unknown Source) 
Unknown.ju(Unknown Source) 
Unknown.h6(Unknown Source) 
Unknown.As(Unknown Source) 
Unknown.j6(Unknown Source) 
Unknown.u6(Unknown Source) 
Unknown.L3(Unknown Source) 
Unknown.k5(Unknown Source) 
Unknown.hn(Unknown Source) 
Unknown.mn(Unknown Source) 
Unknown.ln/<(Unknown Source) 
Unknown.anonymous(Unknown Source) 

我怎樣才能讓這個顯示像舊的GWT風格的實際堆棧跟蹤?

+0

請參閱http://stackoverflow.com/q/24264925/181497。從2.7開始,似乎無法完成(WTF,我知道)。它有助於使用'GWT.log',但是堆棧跟蹤遠不如應有的可讀性和可用性。 – 2015-01-04 15:39:55

+0

這樣說,問題中的堆棧跟蹤已被混淆,這意味着它不是來自超級開發模式 - SDM只生成PRETTY代碼,所以堆棧跟蹤至少*稍微*沒用多少... – 2015-01-05 01:03:50

回答

3

這對我來說很有效,請記住它並不完美,但它會爲您提供堆棧跟蹤中的文件和行號。是的,這適用於gwt 2.7和超級開發模式。您需要將其添加到* .gwt.xml文件中。您可能想要關閉生產環境,因爲它增加了很多代碼膨脹,但使調試更加簡單。

<set-property name="compiler.stackMode" value="emulated" /> 
<set-configuration-property name="compiler.emulatedStack.recordFileNames" 
value="true" /> 
<set-configuration-property name="compiler.emulatedStack.recordLineNumbers" 
value="true" /> 
+0

謝謝克里斯。對於我來說,在設置屬性,重新啓動GWT服務器(開發模式)並重新加載網頁後,客戶端堆棧跟蹤包含類名稱和行號。仍然被模糊處理,但行號和類名非常有幫助。 – 2016-02-13 02:20:31

+0

@jowierun是的,行號和類名是我用SuperDevMode得到的最好的。儘管我已經習慣了它,並且進行了增量刷新,所以它可以更早地發現問題。 – 2016-02-13 02:30:55

+0

這幫我找到了我的問題,但是我得到的堆棧跟蹤是錯誤的(?!)。我需要打開代碼服務器(superdevmode)以獲取有用的堆棧跟蹤(包括可識別的方法名稱)。 – 2016-12-29 00:51:28