Traceview로 트레이스 로그 검사

Traceview의 지원이 중단되었습니다. Android 스튜디오 3.2 이상을 사용하는 경우 대신 CPU 프로파일러를 통해 Debug 클래스로 앱을 계측하여 캡처된 .trace 파일을 검사하고 새로운 메서드 트레이스를 기록하며 .trace 파일을 저장하고 앱 프로세스의 실시간 CPU 사용량을 검사해야 합니다.

Traceview는 트레이스 로그를 그래픽으로 표시하는 도구입니다. Debug 클래스로 코드를 계측하여 로그를 생성할 수 있습니다. 트레이스 데이터 로깅을 시작하고 중지하려는 코드 내 위치를 정확히 지정할 수 있으므로 이 트레이스 메서드는 매우 정확합니다. 아직 이러한 트레이스 로그를 생성하여 연결된 기기에서 로컬 머신에 저장하지 않은 경우 앱을 계측하여 트레이스 로그 생성을 참고하세요. Traceview를 사용하여 이러한 로그를 검사하면 앱을 디버그하고 성능을 프로파일링하는 데 도움이 됩니다.

팁: 명령줄에서 dmtracedump를 사용하여 트레이스 로그 파일의 그래픽 호출 스택 다이어그램을 생성할 수 있습니다.

Debug 클래스로 앱을 계측하여 기록한 트레이스 로그를 볼 필요가 없다면 Android 스튜디오 3.0 이상에 포함된 CPU 프로파일러를 사용하여 앱 스레드를 검사하고 메서드 트레이스를 기록할 수 있습니다.

Traceview를 사용하여 트레이스 로그 열기

Android 스튜디오에서 Traceview를 사용하여 트레이스 로그를 열려면 다음과 같이 진행하세요.

  1. Android Device Monitor를 시작합니다.
  2. Android Device Monitor에서 File > Open File을 선택합니다.
  3. 검사하려는 .trace 파일을 찾습니다.
  4. Open을 클릭합니다.

참고: 코드 축소가 사용 설정되어 빌드(예: 출시 빌드)된 앱의 트레이스 로그를 보려고 하면 일부 메서드와 멤버 이름이 난독화될 수 있습니다. ProGuard mapping.txt 파일을 사용하여 난독화되지 않은 원래 이름을 알아낼 수 있습니다. 이 파일에 관한 자세한 내용은 난독화된 스택 트레이스 디코딩을 참고하세요.

참고: 명령줄에서 traceview 실행이 지원 중단되었습니다.

Traceview 개요

트레이스 로그를 열면 Traceview가 다음과 같은 두 개의 창을 사용하여 로그 데이터를 표시합니다.

  • 타임라인 창: 각 스레드가 메서드에 들어오고 나가는 시기를 설명합니다.
  • 프로필 창: 트레이스 로그 기간에 실행되는 각 스레드를 요약합니다.

다음 섹션에서는 traceview 출력 창에 관한 추가 정보를 제공합니다.

타임라인 창

그림 1은 타임라인 창의 확대 화면을 보여줍니다. 각 스레드의 실행은 고유 행에 표시되며, 경과 시간은 오른쪽으로 증가합니다. 각 메서드는 다양한 색상으로 표시됩니다. 첫 번째 행 아래의 가는 선은 선택한 메서드의 하위 요소(시작부터 종료까지)를 표시합니다.

Traceview 타임라인 창

그림 1. Traceview 타임라인 창

프로필 창

그림 2에 표시된 것처럼 프로필 창에는 트레이스 로그 기간 동안 시스템에서 실행한 각 메서드와 이러한 메서드를 실행하는 데 소요된 시간의 목록이 제공됩니다. 다른 메서드를 호출하는 메서드를 상위 메서드라고 하고 상위 메서드가 호출하는 메서드를 하위 메서드라고 합니다. 메서드를 클릭하여 선택하면 이 메서드의 상위 및 하위 메서드가 모두 두 개의 개별 노드 아래에 표시됩니다.

표에는 각 메서드(최상위 노드)에 관한 포괄 시간 및 전용 시간(밀리초 단위)과 총 시간의 백분율이 표시됩니다. 전용 시간은 메서드의 자체 코드를 실행하는 데 소요된 시간이며, 포괄 시간은 메서드의 자체 코드를 실행하는 데 소요된 시간과 하위 요소를 실행하는 데 소요된 시간을 더한 것입니다. 또한 타이밍 정보는 CPU 시간과 실시간으로 보고됩니다. CPU 시간은 스레드가 CPU 시간을 적극적으로 사용하는 시간만 고려하며 실시간은 스레드가 활성 상태인지 아니면 일시정지 중인지에 관계없이 앱이 메서드에 들어오는 순간부터 이 메서드에서 나갈 때까지의 절대 타이밍 정보를 제공합니다.

프로필 창에 있는 각 최상위 노드의 경우 표의 Calls + Rec, Calls/Total 열(그림 2에 표시되지 않음)에 메서드 호출 수와 재귀 호출 수가 보고됩니다. 또는 상위 및 하위 메서드의 경우 이 열에는 메서드가 최상위 노드에 있는 메서드의 상위 또는 하위인 호출의 수가 표시됩니다.

Traceview 프로필 창

그림 2. Traceview 프로필 창

알려진 Traceview 문제

Traceview 로깅이 스레드를 잘 처리하지 못하여 다음과 같은 문제가 발생합니다.

  • 프로파일링 중에 스레드가 종료되면 스레드 이름이 생성되지 않습니다(Android 5.1 이상에서 수정됨).
  • VM이 스레드 ID를 재사용합니다. 스레드가 중지되고 다른 스레드가 시작되는 경우 동일한 ID를 받을 수 있습니다.