호출 트리에서의 메서드 호출 녹화는 동일한 호출 스택을 가진 호출들을 누적합니다. 정확한 시간 순서 정보를 모두 유지하는 것은 보통 메모리 요구량이 매우 크고, 기록된 데이터의 양이 방대해 해석이 매우 어렵기 때문에 현실적으로 불가능합니다.
하지만 제한된 상황에서는 호출을 추적하고 전체 시간 순서 시퀀스를 유지하는 것이 의미가 있습니다. 예를 들어, 여러 협력하는 스레드의 메서드 호출이 정확히 어떻게 얽혀 있는지 분석하고 싶을 수 있습니다. 디버거로는 이러한 사용 사례를 단계별로 추적할 수 없습니다. 또는 일련의 메서드 호출을 분석하되, 디버거처럼 한 번만 보는 것이 아니라 앞뒤로 자유롭게 이동하며 살펴보고 싶을 수 있습니다. JProfiler는 콜 트레이서를 통해 이러한 기능을 제공합니다.
콜 트레이서는 콜 트레이서 뷰에서 활성화할 수 있는 별도의 녹화 액션이 있으며, 트리거 또는 프로파일링 API로도 사용할 수 있습니다. 과도한 메모리 사용 문제를 방지하기 위해, 수집되는 호출 추적(call trace)의 최대 개수에 제한이 있습니다. 이 제한은 뷰 설정에서 조정할 수 있습니다. 수집되는 추적의 양은 필터 설정에 크게 영향을 받습니다.
호출 추적(call tracing)은 메서드 호출 녹화 타입이 instrumentation으로 설정되어 있을 때만 동작합니다. 샘플링(sampling) 방식은 개별 메서드 호출을 추적하지 않으므로, 샘플링으로는 호출 추적을 수집할 수 없습니다. compact-filtered 클래스에 대한 호출도 호출 트레이서에서 호출 트리와 동일하게 기록됩니다. 만약 본인 클래스에만 집중하고 싶다면, 뷰 설정에서 이러한 호출을 제외할 수 있습니다.
추적된 메서드 호출은 3단계로 구성된 트리로 표시되어, 관련된 호출을 접어서 쉽게 건너뛸 수 있습니다. 세 그룹은 스레드, 패키지, 그리고 클래스입니다. 이 그룹 중 하나라도 현재 값이 변경될 때마다 새로운 그룹 노드가 생성됩니다.
가장 하위 단계에는 메서드 진입 및 메서드 종료 노드가 있습니다. 호출 추적 테이블 아래에는 현재 선택된 메서드 추적의 스택 트레이스가 표시됩니다. 현재 메서드에서 다른 메서드로의 호출 추적이 기록되었거나, 다른 스레드가 현재 메서드를 인터럽트한 경우, 해당 메서드의 진입 및 종료 노드는 인접하지 않을 수 있습니다. 이전 메서드 및 다음 메서드 액션을 사용하여 메서드 단위로만 탐색할 수 있습니다.
추적 및 모든 그룹 노드에 표시되는 타이밍은 기본적으로 첫 번째 추적을 기준으로 하지만, 이전 노드 이후의 상대 시간으로 변경할 수 있습니다. 이전 노드가 부모 노드라면 그 차이는 0이 됩니다. 또한, 동일한 타입의 이전 노드와의 상대 시간을 표시하는 옵션도 사용할 수 있습니다.
적절한 필터를 사용하더라도 매우 짧은 시간에 방대한 양의 추적이 수집될 수 있습니다. 관심 없는 추적을 제거하기 위해 콜 트레이서는 표시되는 데이터를 빠르게 잘라낼 수 있도록 지원합니다. 예를 들어, 특정 스레드가 관련 없거나, 특정 패키지 또는 클래스의 추적이 필요하지 않을 수 있습니다. 또한, 재귀적인 메서드 호출이 많은 공간을 차지할 수 있으므로, 해당 단일 메서드만 제거하고 싶을 수도 있습니다.
노드를 선택한 후 delete 키를 눌러 숨길 수 있습니다.
선택한 노드의 모든 다른 인스턴스와 관련된 모든 자식 노드도 함께 숨겨집니다.
뷰 상단에서는 전체 기록된 호출 추적 중 몇 개가 여전히 표시되고 있는지 확인할 수 있습니다.
숨겨진 노드를 다시 표시하려면 숨김 표시 툴바 버튼을 클릭하면 됩니다.





