1

次のコードでUncaughtExceptionHandlerを追加しました。

        GWT.setUncaughtExceptionHandler(new   
          GWT.UncaughtExceptionHandler() {  
          public void onUncaughtException(Throwable e) {  

              StackTraceElement[] elements = e.getStackTrace();

              String stackTrace = "";
              for (int i = 0; i < elements.length; i++)
              {
                  stackTrace += elements[i] + "\n";
              }

              PlatformServices.instance().log().debug("caught unhandled exception: " + e + " ; Stack:\n" + stackTrace);
          }
        });

問題は、各StackTraceElementの関数名のみが有効であるということです。行番号の-1やクラス名の不明など、他のすべての情報はデフォルトです。

私は何か間違ったことをしているのだろうか?

4

2 に答える 2

2

この情報は、GWTアプリの実行中に利用できない場合があります。コアStackTraceElement.javaクラス、メソッドを確認してくださいtoString()。の値は、lineNumberゼロより大きい場合にのみ出力されます。そして、それがネガティブになることは不可能ではありません。

を使用したテストでUncaughtExceptionHandlerは、まったく同じ結果が得られました(実行時の行番号への参照はありません)。難読化モードでコンパイルすると、ファイル名も取得できなかったため、出力は次のようになりました。

com.google.gwt.core.client.JavaScriptException: (TypeError): Cannot read property 'g' of null 
Unknown.iPb(Unknown Source) 
Unknown.gPb(Unknown Source) 
Unknown.npd(Unknown Source) 
...

実際には解決策ではありませんが、少なくともあなたは一人ではありません:)。

于 2012-10-24T18:51:43.113 に答える
1

モジュールファイルでこれを設定してみてください

<set-property name="compiler.stackMode" value="emulated" />
于 2012-10-24T18:27:34.447 に答える