呼び出しツリーでのメソッドコール記録は、同じ呼び出しスタックを持つコールを集約します。正確な時系列情報を保持することは、通常、膨大なメモリが必要となり、記録されるデータ量も非常に多くなるため、解釈が困難になります。
しかし、限定的な状況では、コールをトレースして全ての時系列シーケンスを保持することに意味があります。たとえば、複数の協調スレッドによるメソッドコールの正確なインターレースを分析したい場合などです。このようなケースでは、デバッガーでステップ実行することはできません。また、一連のメソッド呼び出しを分析したいが、デバッガーのように一度きりでなく、前後に移動しながら確認したい場合もあります。JProfilerは、コールトレーサーによってこの機能を提供します。
コールトレーサーには、コールトレーサービューで有効化できる独立した記録アクションがあり、トリガーやプロファイリングAPIでも開始できます。過剰なメモリ消費を避けるため、収集されるコールトレースの最大数に上限が設定されています。この上限はビュー設定で変更可能です。収集されるトレースの量は、フィルター設定に大きく依存します。
コールトレースは、メソッドコール記録タイプがインストゥルメンテーションに設定されている場合のみ動作します。サンプリングでは個々のメソッドコールを追跡しないため、技術的にコールトレースを収集することはできません。コンパクトフィルターされたクラスへのコールも、呼び出しツリーと同様にコールトレーサーで記録されます。自分のクラスだけに集中したい場合は、ビュー設定でこれらのコールを除外できます。
トレースされたメソッドコールは、3階層のツリーで表示され、関連するコールを折りたたんでスキップしやすくなっています。3つのグループは、 スレッド、 パッケージ、 クラスです。これらのグループのいずれかの値が変化するたびに、新しいグループノードが作成されます。
最下層には、 メソッド開始ノードと、 メソッド終了ノードがあります。コールトレースのテーブル下部には、現在選択されているメソッドトレースのスタックトレースが表示されます。他のメソッドへのコールトレースが現在のメソッドから記録されている場合や、他のスレッドが現在のメソッドを割り込んだ場合、開始ノードと終了ノードは隣接しません。メソッド単位でのナビゲーションは、前のメソッドおよび次のメソッドアクションでのみ行えます。
トレースや全てのグループノードに表示されるタイミングは、デフォルトでは最初のトレースを基準としていますが、前のノードからの相対時間を表示するように変更できます。前のノードが親ノードの場合、その差分はゼロになります。同じタイプの前のノードとの相対時間を表示するオプションも利用可能です。
適切なフィルターを設定していても、非常に短時間で大量のトレースが収集されることがあります。興味のないトレースを除外するために、コールトレーサーでは表示データを素早くトリミングできます。たとえば、特定のスレッドが関連しない場合や、特定のパッケージやクラスのトレースが不要な場合があります。また、再帰的なメソッド呼び出しが多くのスペースを占有する場合、それらの単一メソッドだけを除外したいこともあります。
ノードを選択してdeleteキーを押すことで、そのノードを非表示にできます。選択したノードの他のインスタンスや、関連するすべての子ノードも同様に非表示になります。ビューの上部には、記録された全トレースのうち、現在表示されているコールトレースの数が表示されます。非表示ノードを再度表示するには、非表示を表示ツールバーボタンをクリックしてください。





