= 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のコードのいっしょくたに表示されているため、目的のものを見つけにくい。