Locked History Actions

GWT/SuperDevMode2

Super Dev Modeでのデバッグ

(Classic)Dev Modeでのクライアント側コードのデバッグはEclipseのデバッガがそのまま使えた。これはGWT用のブラウザ側プラグインがよろしくやってくれたからのようだ。 しかしこのプラグインは、かなり以前に開発停止になってしまい、現在のブラウザのバージョンには対応していない。

現在のブラウザ用のGWTアプリを作成するには、Super Dev Modeを使わざるをえないのだが、これはブラウザ(ChromeでもFirefoxでも)に用意されているJavaScriptコードのデバッガを使うらしい。 そしてsourceMapという機能で、実行中のJavaScriptコード(これはCodeServerからブラウザに送られる)を、元のJavaソースコードに対応づけることができるらしい。

サーバコードのデバッグ

その前にサーバコードのデバッグについてみてみる。サーバ側のコードは通常のJavaプログラムとして動作するので、ごく普通のJavaのデバッグと同じ。 (Classic)Dev ModeでもSuper Dev Modeでも変わりがない。単にEclipseのデバッガを使えばよい。

クライアントコードのデバッグ

クライアントコードはEclipseのデバッガではデバッグできないので、Eclipseのデバッガを走らせようと、通常の実行を行おうと同じ。 サーバコードもあわせてデバッグしたいときはEclipseのデバッガで走らせればよい。

Chromeでのデバッグ

現在の最新版 54.0.2840.87 m を使う。

Eclipse上でsampleプロジェクトを起動し、現れたURL「http://127.0.0.1:8888/Sample.html」をchromeに指定する。

デベロッパーツールの表示、sourceMapとステップ実行

chromeの画面で右クリックして「検証」を選択するか、あるいはF12キーを押す。デベロッパーツールが表示される。

このとき、Eclipseのコンソールには

GET /sourcemaps/sample/4F6FB530C38549BB4F377CC069BC03C7_sourcemap.json
   sent source map for module 'sample' in 16 ms

などという表示され、デベロッパーツールの表示と共に、sourceMapが取得されていることがわかる。

上部のElements, Console, Sources, Network, Timeline, Profiles ....というメニューの中のSourcesを選択する。

左側の

top
  127.0.0.1:8888
    sample
  ....

という表示の一番下の方を開いていくと、sample/client/Sample.javaというソースがある。

                class MyHandler implements ClickHandler, KeyUpHandler {
                        /**
                         * Fired when the user clicks on the sendButton.
                         */
                        public void onClick(ClickEvent event) {
                                sendNameToServer();
                        }

というコードがあるので、sendNameToServer()の行番号を右クリックし、「Add breakpoint」する。

その後で、アプリのSendボタンを押すと、この行で実行が停止する。あとは左下側にある「Step Over」「Step Into」「Step Out」等のボタンを使ってステップ実行する。

トレースメッセージの表示と例外時動作

次に、元のコードを少々いじってみる。sendNameToServer()を削除し、以下にする。

                class MyHandler implements ClickHandler, KeyUpHandler {
                        /**
                         * Fired when the user clicks on the sendButton.
                         */
                        public void onClick(ClickEvent event) {
                                GWT.log("before exception");
                                throw new RuntimeException("EXCEPTION!");
                        }

これを実行し、デベロッパーツール上部メニューのConsoleを開くと、上記のメッセージと例外メッセージが表示されることがわかる。

FireFoxでのデバッグ

49.0.2を使用。

chromeとほぼおなじ、URLを表示したら、ブラウザ画面を右クリックで「要素を調査」か、あるいはF12キーを押す。インスペクタなるものが開く。

chromeと同じで、インスペクタが開くと同時に、Eclipseのコンソールでは

GET /sourcemaps/sample/E245BB732289122E09C3EFE892662E12_sourcemap.json
   sent source map for module 'sample' in 14 ms

が表示され、sourceMapがロードされることがわかる。

他のchromeとほとんど同じだが、ソースコードの表示はchromeの方がわかりやすい。なぜなら、Firefoxでは自分開発のコードだけではなく、GWTやJavaのコードのいっしょくたに表示されているため、目的のものを見つけにくい。