앱 실행의 메서드 트레이스를 생성하려면 Debug
클래스를 사용하여 앱을 계측할 수 있습니다. 이 방법으로 앱을 계측하면 기기에서 추적 정보 기록을 시작하고 중지하는 시점을 더 정확하게 관리할 수 있습니다. 기기에서는 또한 사용자가 지정한 이름을 사용하여 트레이스 로그를 저장하므로 나중에 각 로그를 쉽게 식별할 수 있습니다. 그런 다음 Android 스튜디오 CPU 프로파일러를 사용하여 각 트레이스 로그를 볼 수 있습니다.
앱의 코드를 계측하지 않고 CPU 프로파일러에서 추적을 시작하고 중지할 수도 있습니다.
트레이스 로그 생성을 시작하기 전에 앱이 앱별 디렉터리에 트레이스 로그를 저장하는 로직을 추가했는지 확인하세요.
앱 계측
트레이스 로그를 생성하려면 시스템에서 추적 데이터 로깅을 시작할 위치에서 startMethodTracing()
을 호출하세요.
호출 시 .trace
파일의 이름을 지정할 수 있으며 시스템은 대상 기기의 영구 앱 데이터를 위한 패키지별 디렉터리에 파일을 저장합니다. 이 디렉터리는 getExternalFilesDir()
에서 반환하는 것과 동일한 디렉터리이며 대부분의 기기에서 ~/sdcard/
디렉터리에 있습니다.
이 파일에는 바이너리 메서드 트레이스 데이터와 매핑 테이블이 스레드 및 메서드 이름과 함께 포함됩니다. 추적을 중지하려면 stopMethodTracing()
을 호출하세요.
다음 샘플에서는 이름이 sample.trace
인 트레이스 로그의 기록을 시작하고 중지합니다.
Kotlin
// Starts recording a trace log with the name you provide. For example, the // following code tells the system to start recording a .trace file to the // device with the name "sample.trace". Debug.startMethodTracing("sample") // The system begins buffering the generated trace data, until your // application calls <code><a href="/reference/android/os/Debug.html#stopMethodTracing()">stopMethodTracing()</a></code>, at which time it writes // the buffered data to the output file. Debug.stopMethodTracing()
자바
// Starts recording a trace log with the name you provide. For example, the // following code tells the system to start recording a .trace file to the // device with the name "sample.trace". Debug.startMethodTracing("sample"); ... // The system begins buffering the generated trace data, until your // application calls <code><a href="/reference/android/os/Debug.html#stopMethodTracing()">stopMethodTracing()</a></code>, at which time it writes // the buffered data to the output file. Debug.stopMethodTracing();
앱에서 트레이스 로그의 이름을 변경하지 않고 startMethodTracing()
을 다시 호출하면 기기에 저장된 기존 로그를 덮어씁니다. 각 트레이스 로그의 이름을 동적으로 변경하는 방법을 알아보려면 여러 로그 저장에 관한 섹션을 참고하세요.
stopMethodTracing()
을 호출하기 전에 시스템이 최대 버퍼 크기에 도달하면 추적을 중지하고 콘솔에 알림을 보냅니다.
추적을 시작하고 중지하는 메서드는 앱 프로세스 전체에서 작동합니다. 즉, 활동의 onCreate(Bundle)
메서드에서 startMethodTracing()
을 호출하고 이 활동의 onDestroy()
메서드에서 stopMethodTracing()
을 호출할 수 있습니다.
프로파일링이 사용 설정된 경우 앱이 더 느리게 실행됩니다. 즉, 절대 타이밍(예: 'foo()
메서드를 실행하는 데 2.5초가 걸림')을 판단하기 위해 프로파일링 데이터를 사용해서는 안 됩니다. 트레이스 로그의 타이밍 정보는 이전 트레이스 로그와 비교하는 경우에만 유용하므로 최근 변경으로 인해 앱이 더 빨라졌는지 또는 느려졌는지 확인할 수 있습니다.
Android 5.0(API 수준 21) 이상을 실행하는 기기에 배포하는 경우 샘플 기반 프로파일링을 사용하여 런타임 성능에 미치는 영향을 최소화하면서 프로파일링할 수 있습니다. 샘플 프로파일링을 사용 설정하려면 startMethodTracing()
을 호출하는 대신 지정된 샘플링 간격으로 startMethodTracingSampling()
을 호출합니다. 시스템은 앱이 stopMethodTracing()
을 호출할 때까지 주기적으로 샘플을 수집합니다.
여러 로그 저장
앱에서 트레이스 로그에 새 이름을 지정하지 않고 메서드 트레이스를 여러 번 시작하고 중지하는 경우 기기에서 이전 트레이스 로그를 새 트레이스 로그로 덮어씁니다. 즉, 가장 최근의 트레이스 로그만 유지됩니다. 여러 트레이스 로그를 기기에 저장하려면 앱에서 startMethodTracing()
을 호출할 때마다 동적으로 트레이스 로그의 이름을 바꾸세요.
아래 샘플에서는 SimpleDateFormat
클래스를 사용하여 각 트레이스 로그의 이름을 지정할 때 현재 날짜와 시간을 포함합니다.
Kotlin
// Uses the <code><a href="/reference/java/text/SimpleDateFormat.html">SimpleDateFormat</a></code> class to create a String with // the current date and time. val dateFormat: DateFormat = SimpleDateFormat("dd_MM_yyyy_hh_mm_ss", Locale.getDefault()) val logDate: String = dateFormat.format(Date()) // Applies the date and time to the name of the trace log. Debug.startMethodTracing("sample-$logDate")
Java
// Uses the <code><a href="/reference/java/text/SimpleDateFormat.html">SimpleDateFormat</a></code> class to create a String with // the current date and time. SimpleDateFormat dateFormat = new SimpleDateFormat("dd_MM_yyyy_hh_mm_ss", Locale.getDefault()); String logDate = dateFormat.format(new Date()); // Applies the date and time to the name of the trace log. Debug.startMethodTracing( "sample-" + logDate);
기기의 트레이스 로그 액세스
시스템에서 기기에 트레이스 로그를 생성한 후 다음 중 한 가지 방법으로 파일에 액세스할 수 있습니다.
Device Explorer 사용 Device Explorer를 열려면 View > Tool Windows > Device Explorer를 클릭하세요. 또는 도구 창 모음에서 Device Explorer
버튼을 클릭합니다. 그림 1과 같이 앱의 패키지별 디렉터리로 이동하여
.trace
파일을 찾을 수 있습니다.그림 1. Device Explorer를 사용하여 트레이스 로그 찾기
adb pull
명령어를 사용하여 파일을 로컬 머신에 복사합니다. 아래 명령어는sample.trace
라는 트레이스 로그를 기기에서 로컬 머신의~/Documents/trace-logs/
디렉터리에 복사합니다. <ph type="x-smartling-placeholder">adb pull path-on-device/sample.trace ~/Documents/trace-logs/
</ph>
그런 다음 CPU 프로파일러를 사용하여 트레이스 파일을 가져올 수 있습니다.