Locked History Actions

Diff for "GWT/ExceptionHandling"

Differences between revisions 2 and 3
Deletions are marked like this. Additions are marked like this.
Line 2: Line 2:

クライアント側で発生した例外を放置しておくと、何のメッセージも出さずに単純に機能不全に陥いる。
Firebugのコンソールでこれを確認することはできるのだが、次の問題がある。

* ユーザ側でFirebugを開いて例外を確認することは困難。
* この際のスタックトレースは難読化されているので、意味不明。

以下では、クライアント側で例外が発生したら、それをサーバ側に送り、難読化を解除して適切なスタックトレースを表示させる方法を示す。

== ビルド・設定ファイルの変更 ==

=== gwtcコンパイル持にシンボルマップを作成させる ===

難読化解除のためには、シンボルマップ、つまり元の名前と変更された名前のマップが必要。
これはgwtcコンパイラに「-extra war/WEB-INF/classes/」という引数を指定してやる必要がある。
antで行っている場合は以下。
{{{
  <arg line="-extra"/>
  <arg value="war/WEB-INF/classes/"/>
}}}

=== gwt.xmlファイルの変更 ===

以下を追加する。
{{{
  <set-property name="compiler.stackMode" value="emulated" />
  <set-configuration-property name="compiler.emulatedStack.recordLineNumbers" value="true" />
}}}


== プログラムの変更 ==

例外処理

クライアント側で発生した例外を放置しておくと、何のメッセージも出さずに単純に機能不全に陥いる。 Firebugのコンソールでこれを確認することはできるのだが、次の問題がある。

* ユーザ側でFirebugを開いて例外を確認することは困難。 * この際のスタックトレースは難読化されているので、意味不明。

以下では、クライアント側で例外が発生したら、それをサーバ側に送り、難読化を解除して適切なスタックトレースを表示させる方法を示す。

ビルド・設定ファイルの変更

gwtcコンパイル持にシンボルマップを作成させる

難読化解除のためには、シンボルマップ、つまり元の名前と変更された名前のマップが必要。 これはgwtcコンパイラに「-extra war/WEB-INF/classes/」という引数を指定してやる必要がある。 antで行っている場合は以下。

  <arg line="-extra"/>
  <arg value="war/WEB-INF/classes/"/>

gwt.xmlファイルの変更

以下を追加する。

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

プログラムの変更

参考資料