チェックポイントでのオブジェクトの検査
学習の目的
- Apex コードにチェックポイントを設定する。
- チェックポイントインスペクターを使用してメモリ内のオブジェクトを分析する。
Apex コードへのチェックポイントの設定
宇宙船がシステムエラーのアラームを発した瞬間に、ログに目をやり、どこでどのような問題が生じたのか見極める必要があります。
同様に、Apex コードでエラーが発生した場合、パフォーマンスの問題が生じた場合、想定した結果が得られない場合も、最初のステップは、デバッグログを確認して問題を特定することです。ログ全体を 1 行ずつ見ていく作業はかなり面倒です。そこで役に立つのがチェックポイントです。チェックポイントは、実行中の特定の時点における Apex コードの状態のスナップショットを表示します。
Apex コードにはチェックポイントを 5 つまで設定できます。Visualforce マークアップではチェックポイントを使用できません。
EmailMissionSpecialist
クラスにチェックポイントを設定してみましょう。-
[File (ファイル)] | [Open (開く)] を選択して、
EmailMissionSpecialist
クラスを開きます。 - [Debug (デバッグ)] | [Change Log Levels (ログレベルの変更)] を選択します。
- [General Trace Setting for You (全般トレース設定)] セクションで、[Add/Change (追加/変更)] をクリックします。
-
ApexCode
のログレベルを [FINEST (最も詳細)] に設定します。
メモ: チェックポイントを設定するには、「すべてのデータの参照」ユーザー権限が必要です。チェックポイントを使用して結果を生成するには、実行匿名を使用してコードを実行するか、自分で DEVELOPER_LOG 追跡フラグを設定します。追跡フラグは、Apex のログレベルが INFO 以上でなければなりません。 - 変更を保存するには、[Done (完了)] をクリックします。
- [Change Log Levels (ログレベルの変更)] ダイアログボックスを終了するには、[Done (完了)] をクリックします。
ソースコードエディターにコードを表示すると、左側に行番号が示されます。inspectResults(results);
の行番号をクリックします。チェックポイントが作成されたことを示す赤いドット (1) が示されます。
これで、コードを実行し、[Checkpoints (チェックポイント)] タブを使用して分析することができます。
[Checkpoints (チェックポイント)] タブ
[Checkpoints (チェックポイント)] タブを使用すると、コード実行のどこに問題があり、その時点のオブジェクトの値が何かを正確に把握することができます。次のコードを実行して、チェックポイントの動作を見てみましょう。
[Debug (デバッグ)] | [Open Execute Anonymous Window (実行匿名ウィンドウを開く)] を選択します。次のコードを入力して実行します。Enter your email address を自身のメールアドレスに置き換えます。
EmailMissionSpecialist em = new EmailMissionSpecialist(); em.sendMail('Enter your email address', 'Flight Path Change', 'Mission Control 123: Your flight path has been changed to avoid collision ' + 'with asteroid 2014 QO441.');
Apex コードが正常に実行されたら、デバッグログを開き、[Checkpoints (チェックポイント)] タブをクリックして結果を確認します。
- [Checkpoints (チェックポイント)] テーブルに、各チェックポイントの名前空間、クラス、行番号が示されます。また、各チェックポイントが作成された日時も示されます。
- [Checkpoint Locations (チェックポイントの場所)] テーブルには、選択したチェックポイントで捕捉されたファイル名、行番号、反復が示されます。
[Checkpoints (チェックポイント)] テーブルのチェックポイントをダブルクリックして、チェックポイントインスペクターで捕捉された結果を確認します。お楽しみはこれからです!
チェックポイントインスペクター
- Heap (ヒープ) — チェックポイントが設定されたコード行の実行時点でメモリ内に存在するすべてのオブジェクトが表示されます。
- Symbols (記号) — メモリ内にあるすべての記号がツリービューで示されます。
[Heap (ヒープ)] タブ
- [Types (種別)] で、
[Messaging.SingleEmailMessage]
をクリックします。 - [Instances (インスタンス)] で、このオブジェクト種別の任意のインスタンスをクリックします。
- [State (状態)] で、オブジェクトの項目とその値を参照します。
[Symbols (記号)] タブ
[Symbols (記号)] タブは、任意のチェックポイントにおける各種オブジェクトの状態をすばやく簡単に確認する手段です。記号は、特定のオブジェクトを参照する一意の名前です。このタブには、メモリ内のすべての記号がツリービューで示されます。
- タブのチェックポイントの結果をクリアするには、[Debug (デバッグ)] | [Clear (クリア)] | [Checkpoint Results Panel (チェックポイントの結果パネル)] を選択します。
- [Debug (デバッグ)] | [Open Execute Anonymous Window (実行匿名ウィンドウを開く)] を選択します。
- 今回は無効なメールアドレス (testingemail など) を使用して、
EmailMissionSpecialist
クラスをもう一度実行します。EmailMissionSpecialist em = new EmailMissionSpecialist(); em.sendMail('testingemail', 'Flight Path Change', 'Mission Control 123: Your flight path has been changed to avoid collision ' + 'with asteroid 2014 QO441.');
- コードを実行したら、[Checkpoints (チェックポイント)] タブをクリックします。
[Checkpoints (チェックポイント)] タブには結果が何も表示されません。コード実行が、チェックポイントが設定された行番号まで達していないためです。
-
[File (ファイル)] | [Open (開く)] を選択して、
EmailMissionSpecialist
クラスを開きます。 -
String[] toAddresses = new String[] {address}
の左側の行番号をクリックします。 - [Debug (デバッグ)] | [Clear (クリア)] | [Checkpoint Results Panel (チェックポイントの結果パネル)] を選択します。
- [Debug (デバッグ)] | [Open Execute Anonymous Window (実行匿名ウィンドウを開く)] を選択します。
- 無効なメールアドレス (testingemail など) を使用して、
EmailMissionSpecialist
クラスをもう一度実行します。EmailMissionSpecialist em = new EmailMissionSpecialist(); em.sendMail('testingemail', 'Flight Path Change', 'Mission Control 123: Your flight path has been changed to avoid collision ' + 'with asteroid 2014 QO441.');
- [Checkpoints (チェックポイント)] タブをクリックします。
[Checkpoints (チェックポイント)] タブに新しいエントリが表示されます。今回は、チェックポイントインスペクターを使用して、メモリ内のオブジェクトを分析することができます。