xpagesday2015 - 誰も教えてくれなかったデバッグ方法

29
誰誰誰誰誰誰誰誰誰誰誰 XPages 誰誰誰誰誰誰誰 誰誰誰誰誰誰誰誰誰誰誰誰誰誰誰 誰誰 誰

Upload: mitsuru-katoh

Post on 14-Apr-2017

2.394 views

Category:

Software


0 download

TRANSCRIPT

Page 1: XPagesDay2015 - 誰も教えてくれなかったデバッグ方法

誰も教えてくれなかったXPages のデバッグ方法

チームスタジオジャパン株式会社加藤 満

Page 2: XPagesDay2015 - 誰も教えてくれなかったデバッグ方法

このセッションでカバーする内容

アプリケーションエラーや動作が「?」のときにどう対処するかを考える

対象- SSJS の古典的なデバッグとエラー制御- ログを取る- SSJS デバッガー (9.0 以降 )

Page 3: XPagesDay2015 - 誰も教えてくれなかったデバッグ方法

エラーページの表示

基本中の基本!

Page 4: XPagesDay2015 - 誰も教えてくれなかったデバッグ方法

print() と _dump()

Page 5: XPagesDay2015 - 誰も教えてくれなかったデバッグ方法

print() と _dump()ともに変数に指定したオブジェクトをコンソールに表示する

ものだが何が違うのか?

Page 6: XPagesDay2015 - 誰も教えてくれなかったデバッグ方法

print() と _dump()print() は基本的にどんなオブジェクト型にも対応するが、そ

のオブジェクトの toString() がコールされる- 例でみる jsonObject の [object Object] では役に立たない

_dump() は複数要素をもつオブジェクト( JSON や配列、 HashMap 、 Vector 値などなど)に有効

- サマリー情報だけでなく、それぞれのエントリーのすべての詳細データを書き出してくれる

Page 7: XPagesDay2015 - 誰も教えてくれなかったデバッグ方法

try / catch /finally

Page 8: XPagesDay2015 - 誰も教えてくれなかったデバッグ方法

try {

}catch(e) {

}finally {

}

評価コード

エラー発生後のコード

エラーの有無にかかわらず実行する後処理コード

Page 9: XPagesDay2015 - 誰も教えてくれなかったデバッグ方法

var iconPath = "";try{var doc = viewEntry.getDocument();if(doc.hasEmbedded()){

iconPath = "/attachment.gif";}doc.recycle();}catch(e){} finally {return iconPath;}

var iconPath = "";var doc = viewEntry.getDocument();if(doc.hasEmbedded()){

iconPath = "/attachment.gif";}doc.recycle();return iconPath;

Page 10: XPagesDay2015 - 誰も教えてくれなかったデバッグ方法

Commons のログ機能を使ってみる

logger クラスを使ってログ出力- com.ibm.commons.log クラスを拡張して console.log に出力

• < データディレクトリー >¥IBM_TECHNICAL_SUPPORT 内- SSJS から利用可能- notes.ini に HTTP_OSGI_ENABLE_CONSOLE_LOGGING=1

( 要サーバー再起動 )- プログラマブル {0} {1} {n} に変数を代入可能

Page 11: XPagesDay2015 - 誰も教えてくれなかったデバッグ方法

まずは java コードから

Java の設計としてこの以下のコード追加- package 名はご自由に

Page 12: XPagesDay2015 - 誰も教えてくれなかったデバッグ方法

SSJS

Page 13: XPagesDay2015 - 誰も教えてくれなかったデバッグ方法

errorp() – エラーwarnp() – 警告infop() – 情報

API の詳細はhttp://tinyurl.com/XPagesLogMgrAPI

Page 14: XPagesDay2015 - 誰も教えてくれなかったデバッグ方法

SSJS デバッガー

Page 15: XPagesDay2015 - 誰も教えてくれなかったデバッグ方法

SSJS デバッガー

Domino Designer 9.0 以降Domino サーバー上でも Designer の HTTP からでも動作notes.ini

JavaEnableDebug=1JavaDebugOptions=transport=dt_socket,server=y,suspend=n,address=8000JavascriptEnableDebug=1- ※1 HTTP の再起動が必要- ※2 JavascriptEnableDebug は大文字小文字を正確に

本番環境のサーバーでは決して行わないでください

Page 16: XPagesDay2015 - 誰も教えてくれなかったデバッグ方法

Domino Designer でのデバッグ構成

Page 17: XPagesDay2015 - 誰も教えてくれなかったデバッグ方法
Page 18: XPagesDay2015 - 誰も教えてくれなかったデバッグ方法

失敗

成功

Page 19: XPagesDay2015 - 誰も教えてくれなかったデバッグ方法

ブレークポイントの設定

ソースパネル上の SSJS コードの設定にブレークポイントを

ダブルクリック!!!

Page 20: XPagesDay2015 - 誰も教えてくれなかったデバッグ方法

デバッグの開始

XPage をプリビューすると ...

Page 21: XPagesDay2015 - 誰も教えてくれなかったデバッグ方法
Page 22: XPagesDay2015 - 誰も教えてくれなかったデバッグ方法

デバッグの操作- ステップイン (F5)- ステップオーバー (F6)- ステップリターン (F7)- 中断- 再開 (F8)- 終了 (Ctrl+F2)

Page 23: XPagesDay2015 - 誰も教えてくれなかったデバッグ方法

- 「変数」タブで値を確認• 実行時のそれぞれのステップでのスコープ変数の値を確認するには特に有効• 値は確認するだけでなく、その場で変更することも可能

Page 24: XPagesDay2015 - 誰も教えてくれなかったデバッグ方法

ブレークポイントに debugger ステートメントを利用する

Page 25: XPagesDay2015 - 誰も教えてくれなかったデバッグ方法

debugger ステートメント

目的他の開発者とブレークポイントを共有する

注意点Notes/Domino 9.0 以降で有効

- 8.5.x 以前のバージョンではエラーが発生本番環境のコードではこのステートメントは削除しましょ

う!

Page 26: XPagesDay2015 - 誰も教えてくれなかったデバッグ方法

「サーバーサイド JavaScript の最初の行で停止」オプション

すべての SSJS の最初の行で停止

- 挙動がおかしいアプリでどこが原因がわからないときに有効

- もちろん途中で好きな場所にブレークポイントを設定してもよい

Page 27: XPagesDay2015 - 誰も教えてくれなかったデバッグ方法

条件付きブレークポイントの設定

設定したブレークポイントを右クリック- ブレークポイント・プロパティ- 条件の有効化- 条件式

Page 28: XPagesDay2015 - 誰も教えてくれなかったデバッグ方法
Page 29: XPagesDay2015 - 誰も教えてくれなかったデバッグ方法

ご視聴ありがとうございました

ご質問?ご批判?