24.2.8 デバッグ・メッセージの表示

デバッグ・メッセージの表示について学習します。

24.2.8.1 アプリケーションのデバッグ・メッセージの表示

アプリケーションのデバッグ・メッセージを表示します。

ヒント:

デバッグ・メッセージにアクセスするには、アプリケーションに移動し、ツールバーにある「検索」アイコンをクリックします。「アイテム・ファインダ」が表示されたら、「デバッグ」タブをクリックします。

デバッグ・メッセージを表示するには:

  1. ワークスペースのホームページで、「アプリケーション・ビルダー」アイコンをクリックします。
  2. 必要なアプリケーションを選択します。
  3. アプリケーションを実行します。
  4. 実行時開発者ツールバーを見つけます。
  5. 実行時開発者ツールバーで、「デバッグ」をクリックしてから、「デバッグの表示」を選択します。
    デバッグ・レポートが表示されます。
  6. 表示するセッションを見つけて、「ビュー識別子」リンクをクリックします。

    デバッグ・ページが表示されます。

  7. 最も時間がかかったステップを表示するには、レポートの上のグラフのステップにカーソルを合わせます。

    ステップの詳細を含むグラフが表示されます。

  8. レポートのそのステップに移動するには、棒グラフをクリックします。

    ノート:

    レポート内にリストされているデバッグ・セッションは最低2週間存続し、アクティビティ・ログと一緒にエージ・アウトされます。この時間枠は、通常は、デバッグ目的には十分な期間です。

24.2.8.2 ユーティリティからのデバッグ・メッセージの表示

「ユーティリティ」にある「デバッグ・メッセージ」ページを使用して、アプリケーションによって生成されたデバッグ・メッセージを表示またはパージします。

「デバッグ・メッセージ」ページを使用して、アプリケーションによって生成されたすべてのデバッグ・メッセージを表示し、経過時間、現在のセッションまたはビュー識別子別にデバッグ・メッセージ・データをパージします。

「デバッグ・メッセージ」ページを表示するには:

  1. ワークスペースのホームページで、「アプリケーション・ビルダー」アイコンをクリックします。
  2. 必要なアプリケーションを選択します。
  3. 「ユーティリティ」をクリックします。
  4. ユーティリティ・ページで、「デバッグ・メッセージ」をクリックします。
    「デバッグ・メッセージ」ページが表示されます。
  5. 表示するセッションの「ビュー識別子」をクリックします。

    デバッグ・メッセージ・データ・ページが表示されます。

  6. 最も時間がかかったステップを表示するには、レポートの上のグラフのステップにカーソルを合わせます。

    ステップの詳細が表示されます。

  7. レポート内のあるステップに移動するには、その棒グラフをクリックします。

    ノート:

    レポートにリストされているデバッグ・セッションは最低2週間存続し、アクティビティ・ログと一緒にエージ・アウトされます。これは通常、デバッグ目的では十分な期間です。
  8. デバッグ・メッセージをパージするには:
    1. 「デバッグ・メッセージのパージ」をクリックします。
    2. デバッグ・メッセージ・データのパージで、次のいずれかのパージ・オプションを選択します:
      • すべてのメッセージをパージ
      • 経過時間別にメッセージをパージ - 「次より古い」で、そのアプリケーションについて何日分または何週間分のデバッグ・メッセージ・データをパージするかを選択します。
      • 現行セッションのメッセージをパージ
      • ビュー識別子ごとにパージ - 選択した場合は、「ビュー識別子」に入力します。
    3. 「パージ」をクリックします。

24.2.8.3 デバッグ・メッセージの問合せ

デバッグ・メッセージの問合せについて学習します。

ヒント:

このトピックは、開発インスタンスと実行時専用インスタンスの両方に適用されます。

ページ・ビューIDを使用すると、デバッグ・メッセージの問合せが容易になります。それを取得するには、次の例で示すようにAPEX_WORKSPACE_ACTIVITY_LOGを問い合せます:

select *
  from APEX_WORKSPACE_ACTIVITY_LOG
 where application_id = <APPLICATION_ID>
   and page_id = <PAGE_ID>
 order by view_timestamp desc;

探しているデバッグ・メッセージに関連付けられているDEBUG_PAGE_VIEW_IDを見つけて書き留めます。

APEX_DEBUG_MESSAGESビューからデバッグ・メッセージを問い合せることができます。このビューには、現在のワークスペース内で記録されているすべてのメッセージが表示されます。メッセージは、次の例で示すようにフィルタおよびソートできます:

select *
  from APEX_DEBUG_MESSAGES
 where page_view_id = <DEBUG_PAGE_VIEW_ID>
 order by message_timestamp asc;

前述の例では、<DEBUG_PAGE_VIEW_ID>が、前に書き留めたIDです。前述の問合せでのメッセージ列には、デバッグ目的のための最も関連性の高い情報が含まれます。

24.2.8.4 使用可能なデバッグ・ユーティリティ・スクリプト

使用可能なデバッグ・ユーティリティ・スクリプトについて学習します。

ヒント:

このトピックで説明するスクリプトは、Autonomous Databaseで実行されているOracle APEXでは使用できません。

APEXソフトウェア・ディストリビューションには、デバッグに役立つSQLユーティリティ・スクリプトが含まれています。これらのスクリプトは、apex/utilities/debugフォルダにあります。このトピックで示すスクリプトを使用するには、SYSDBA権限が必要です。

activity.sql

activity.sqlは、最近のアクティビティ・ログ・エントリを出力します。このスクリプトは、設定のカンマ区切りリストを含めることができる、1つのパラメータを取ります。スクリプトの使用方法の説明を表示するには、次を実行します:

SQL> @activity help

d0.sql

d0.sqlは、デバッグ・モードの無効化とLEVEL9デバッグ・ログとを切り替えます。LEVEL9デバッグ・レベルでは、すべてのリクエストがログに記録され、大量のメッセージが生成されます。LEVEL9デバッグ・ログにより、すべてのユーザーのアプリケーション・パフォーマンスと、開発者のアプリケーション・ビルダー・パフォーマンスに影響があります。たとえば:

-- Switch from disabled debug to LEVEL9
SQL> @d0
-- Switch from LEVEL9 debug to disabled debug
SQL> @d0

ノート:

インスタンス全体のデバッグは、アプリケーションのパフォーマンスに影響するため、必要なデバッグ情報を収集したらすぐに無効にすることをお薦めします。

d1.sql

d1.sqlは、デバッグが有効になっていた最後30個のAPEXリクエストについてレポートを表示します。表示されたPAGE_VIEW_IDd2.sqlスクリプトとともに使用します。

ds.sql

ds.sqlは、指定されたAPEXセッションについてデバッグ・データを含むAPEXリクエストのレポートを表示します。表示されたPAGE_VIEW_IDd2.sqlスクリプトとともに使用します。たとえば:

SQL> @ds <SESSION_ID>

d2.sql

d2.sqlは、指定されたPAGE_VIEW_IDについて詳細をファイルに保存し、このファイルをテキスト・エディタで開きます。SQLclでの_editor変数を、どのエディタに定めることもできます。たとえば:

SQL> define _editor=vim
SQL> @d2 <PAGE_VIEW_ID>

Example

次に、APEXデバッグ・ユーティリティ・スクリプトの一般的な使用例を示します:

$ cd apex/utilities/debug
$ sql / as SYSDBA
SQL> alter session set current_schema=APEX_240200;
SQL> define _editor=vim
SQL> @d0
Changed debug level from "" to "9"
-- Reproduce the problem
SQL> @d0
Changed debug level from "9" to ""
SQL> @d1
 
PAGE_VIEW_ID STARTED  SECS   LVL  CNT PATH_INFO   FLOW_PAGE   SESSION_ID      WORKSPACE APEX_USER
____________ ________ ______ ___ ____ ___________ ___________ _______________ _________ _________
@d2 1002     14:02:48  10.84 WRN  261             100-4750:50 8488213505163   DEMO      DEMO
@d2 1003     14:12:22   0.87     2603 show        100:9       0-5628985429897 DEMO      DEMO
@d2 1006     14:12:23   0.75      252 ajax plugin 100:9       0-5628985429897 DEMO      DEMO
@d2 1007     14:12:41   2.04      297 ajax plugin 100:9       0-5628985429897 DEMO      DEMO
 
4 rows selected.
 
SQL> @d2 1003
 
-- This will open the editor program you defined above, in this case vim with content similar to the following:
 
SECS MESSAGE_LEVEL MESSAGE FLOW_PAGE SID_SGID APEX_USER CALL_STACK1
____ _____________ _______ _________ ________ _________ ___________
...

または、d1.sqlのかわりにds.sqlを実行して、PAGE_VIEW_IDの検索を特定のAPEXセッションIDに絞り込むこともできます。たとえば:

$ cd apex/utilities/debug
$ sql / as SYSDBA
SQL> alter session set current_schema=APEX_240100;
SQL> define _editor=vim
SQL> @d0
Changed debug level from "" to "9"
-- Reproduce the problem and obtain the APEX session ID, in this case 5628985429897
SQL> @d0
Changed debug level from "9" to ""
SQL> @ds 5628985429897
 
PAGE_VIEW_ID STARTED  SECS    CNT PATH_INFO                                FLOW_PAGE SESSION_ID      WORKSPACE APEX_USER
____________ ________ ______ ____ ________________________________________ _________ _______________ _________ _________
@d2 1003     14:12:22   0.87 2603 bar?clear=9&session=5628985429897&cs=391 100:9     0-5628985429897 DEMO      DEMO
@d2 1006     14:12:23   0.75  252 wwv_flow.ajax?p_context=sample-charts%2F 100:9     0-5628985429897 DEMO      DEMO
@d2 1007     14:12:41   2.04  297 wwv_flow.ajax?p_context=sample-charts%2F 100:9     0-5628985429897 DEMO      DEMO
@d2 1008     14:12:41   1.95  297 wwv_flow.ajax?p_context=sample-charts%2F 100:9     0-5628985429897 DEMO      DEMO
 
4 rows selected.
 
SQL> @d2 1003
 
-- This will open the editor program you defined above, in this case vim with content similar to the following:
 
SECS MESSAGE_LEVEL MESSAGE FLOW_PAGE SID_SGID APEX_USER CALL_STACK1
____ _____________ _______ _________ ________ _________ ___________
...

24.2.8.5 ユーザー・インタフェースからのAPEXセッションのデバッグ

ユーザー・インタフェースからのAPEXセッションのデバッグについて学習します。

「使用可能なデバッグ・ユーティリティ・スクリプト」で示されているデバッグ・ユーティリティ・スクリプトを実行できない場合は、ユーザー・インタフェースで既存のレポートを使用してAPEXセッションをデバッグできます。

ノート:

この手順の1要件として、アプリケーションにパブリック・ページを含めることでAPEXセッションにアクセスする必要があります。デバッグ用に特別にパブリック・ページを作成する場合は、エラーを解決した後に必ずそれを削除してください。

APEXユーザー・インタフェースからセッションのデバッグを実行するには:

  1. アプリケーションにパブリック・ページがない場合は、「ページの作成ウィザード」を実行することでそれを作成します。
    1. ワークスペースのホームページで、「アプリケーション・ビルダー」をクリックします。
    2. アプリケーションを選択します。
    3. 「ページの作成」ボタンをクリックします。
    4. 「ページの作成」ウィザードで、次のステップを実行します。
      • コンポーネント - 「空白ページ」を選択します。
      • 「ページ定義」、「名前」 - このページについてテキスト名を指定します。
      • 「ページの作成」をクリックします。
  2. ページ属性を編集し、ページをパブリックにします:
    1. アプリケーションのホームページで、その新しいページを選択します。
      ページ・デザイナが表示されます。
    2. 「レンダリング」タブで、そのページを選択します。
    3. Property Editorで、次のように操作します。
      • 「セキュリティ」グループを見つけます。
      • 認証 - 「パブリック・ページ」を選択します。
  3. ページを実行します。「ページの保存と実行」をクリックします。
  4. 開発環境のタブに戻り、「セッションの詳細」レポートを表示し、「デバッグ・レベル」を設定します:
    1. 「管理」メニューをクリックし、「アクティビティのモニター」を選択します。
    2. 「セッション」で、「アクティブ・セッション」を選択します。
    3. セッションの詳細ページを表示するには、セッションIDをクリックします。
    4. 「セッション属性」、「デバッグ・レベル」 - 「APEX Trace」(LEVEL9)を選択します。このオプションを選択すると、APEXエンジンからのメソッドおよび操作について詳細情報がログに記録されます。
    5. 「変更の適用」をクリックします。

      APEXによって、APEX_AUTHENTICATION.CALLBACKを含め、リクエストごとにこのセッションのデバッグ・データがログに記録されるようになります。

  5. エラーを再現します:
    1. アプリケーションで、そのURLを変更して、保護されたページに移動し、[Enter]を押します。

      APEXによって、認証が必要であることが検出され、SSOログイン・サーバーにリダイレクトされます。

    2. 資格証明を入力し、APEXエラー・ページが表示されるまで続行します。
  6. 開発環境のタブに戻り、「ワークスペース管理」で「セッションの詳細」レポートを再度表示します。
    1. 「管理」メニューをクリックし、「アクティビティのモニター」を選択します。
    2. 「セッション」で、「アクティブ・セッション」を選択します。
    3. セッションの詳細ページを表示するには、セッションIDをクリックします。
    4. 「セッションの詳細」ページで、「ページ・ビュー」リージョンを見つけて、「実行」をクリックします。
    5. エラーが発生したリクエストのデバッグIDをクリックして詳細を表示します。このレポートには、d2.sqlスクリプトを実行した場合と同じ情報が取り込まれます。

    ヒント:

    使用可能なすべての列がデフォルトでこのレポートに表示されるわけではありません。表示されるデフォルト列を変更するには、「アクション」メニュー、「列」の順にクリックします。次に、他の列をさらに選択し、「適用」をクリックします。たとえば、「コール・スタック」を追加することを検討するなどです。

24.2.8.6 デバッグ出力を共有する場合のヒント

デバッグ出力を共有する場合のベスト・プラクティスについて学習します。

オフラインでの確認のためにアプリケーションからのデバッグ出力を共有する必要がある場合は、次のベスト・プラクティスを検討してください:

  • 適切なレベルでログ取得を有効にします。

    たとえば、アプリケーションの動作をデバッグする場合は、「アプリケーション・トレース」(LEVEL6)を使用します。APEXエンジンの動作をデバッグする場合は、APEXエンジン・トレース(LEVEL9)を使用します。

    デバッグ・レベルの詳細は、「使用可能なデバッグ・ユーティリティ・スクリプト」を参照してください。

  • APEXエンジン・トレース(LEVEL9)レベルでデバッグ出力を確認している場合は、レポートに「コール・スタック」列を含めることを検討してください。これは、デバッグ出力をOracleサポートと共有する予定である場合に特に役立ちまます。対話モード・レポートでデバッグ出力を確認する場合は、「アクション」メニューを使用して「コール・スタック」列を選択します。

  • 適切なページ・ビューIDを選択します。検討するベスト・プラクティス:

    • ページのレンダリング中に実行される操作をデバッグする場合は、「レンダリング」ページ・ビュー・タイプの最後のページ・ビューを選択します。

    • ページの送信中に操作が発生した場合は(たとえば、ボタンのクリック後)、「プロセス」ページ・ビュー・タイプの最後のページ・ビューを選択します。

    • 操作が間に発生する場合は(たとえば、部分的なページ・リフレッシュやチャートのレンダリング)、「AJAX」ページ・ビュー・タイプの最後のページ・ビューを選択します。

    • モーダル・ダイアログは別々のページであるため、ダイアログをデバッグする場合は、親ページのページ番号ではなくそのダイアログのページ番号を検索する必要があることに注意してください。

  • デバッグ出力は複数の形式でエクスポートできます。オフラインでの確認に最も有用な形式は、HTML形式とExcel形式です。対話モード・レポートでデバッグ出力を確認する場合は、「アクション」メニューを使用し、「ダウンロード」をクリックし、「HTML」または「Excel」形式を選択します。

デバッグ出力を共有するには:

  1. 目的のページ・ビューIDを見つけます。使用可能なデバッグ・レポートについてさらに学習するには、24.5.6「デバッグ・メッセージの表示」を参照してください。
  2. 対話モード・レポートの「アクション」メニューから、「ダウンロード」をクリックし、目的の形式を選択し、デバッグ・レポートをファイル・システムに保存します。
  3. ご使用の環境でアプリケーション・ビルダーを使用できない場合は、d2.sqlスクリプトを使用してデバッグを出力し、結果となるテキスト・ファイルを共有します。さらに学習するには、24.5.6.4「デバッグ・ユーティリティ・スクリプトの使用」で詳細を参照してください。