Trace-Logs durch Instrumentieren Ihrer Anwendung generieren

Sie können Ihre App instrumentieren, um einen Methoden-Trace der Ausführung Ihrer App zu generieren mit Debug . Wenn Sie Ihre App so instrumentieren, haben Sie mehr Kontrolle darüber, wann genau das Gerät mit der Aufzeichnung von Informationen zur Fehlerbehebung beginnt und aufhört. Das Gerät speichert auch Trace-Logs mit den von Ihnen angegebenen Namen, sodass Sie jedes Log einfach identifizieren können . Sie können sich die einzelnen Trace-Logs dann in Android Studio ansehen. CPU-Profiler

Sie können auch Tracing im CPU Profiler starten und beenden ohne den Code Ihrer App zu instrumentieren.

Bevor Sie mit dem Erstellen von Ablaufprotokollen beginnen, müssen Sie Ihrer App Logik hinzufügen, um Ablaufprotokolle im appspezifischen Verzeichnis zu speichern.

App instrumentieren

Wenn Sie Trace-Logs erstellen möchten, rufen Sie startMethodTracing() an, wo das System mit dem Logging von Trace-Daten beginnen soll.

Sie können im Aufruf den Namen für die Datei .trace angeben. Das System speichert sie dann in einem paketspezifischen Verzeichnis, das für nichtflüchtige App-Daten auf dem Zielgerät vorgesehen ist. Das ist dasselbe Verzeichnis, das von getExternalFilesDir() zurückgegeben wird und sich auf den meisten Geräten im Verzeichnis ~/sdcard/ befindet. Diese Datei enthält die Trace-Daten der binären Methoden und eine Zuordnungstabelle mit Thread. und Methodennamen. Wenn Sie die Standortermittlung beenden möchten, drücken Sie stopMethodTracing().

Im folgenden Beispiel wird die Aufzeichnung eines Trace-Logs mit dem Namen gestartet und beendet. 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()

Java

// 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();

Wenn Ihre App startMethodTracing() noch einmal aufruft, ohne den Namen des Protokolls zu ändern, wird das vorhandene Protokoll überschrieben, das auf dem Gerät gespeichert ist. Informationen zum dynamischen Ändern des Namens jedes Protokolls finden Sie im Abschnitt zum Speichern mehrerer Protokolle.

Wenn das System vor dem Aufruf die maximale Puffergröße erreicht stopMethodTracing(), stoppt das System das Tracing und sendet eine Benachrichtigung an die Konsole. Die Methoden zum Starten und Beenden von Protokollen funktionieren für den gesamten App-Prozess. Das könnten Sie beispielsweise startMethodTracing() in den onCreate(Bundle) und rufen Sie stopMethodTracing() auf in onDestroy() dieser Aktivität .

Beachten Sie, dass Ihre App langsamer ausgeführt wird, wenn das Profiling aktiviert ist. Sie sollten die Profiling-Daten also nicht verwenden, um absolute Zeitangaben zu ermitteln, z. B. „Die Ausführung der Methode foo() dauert 2,5 Sekunden“. Die Zeitangaben in den Trace-Logs sind nur dann nützlich, wenn Sie sie mit früheren Trace-Logs vergleichen. So können Sie sehen, ob Ihre App durch die letzten Änderungen schneller oder langsamer geworden ist.

Bei der Bereitstellung auf Geräten mit Android 5.0 (API-Level 21) und höher haben Sie folgende Möglichkeiten: Verwenden Sie die samplebasierte Profilerstellung, um Profile mit weniger Auswirkungen auf die Laufzeitleistung zu erstellen. Bis Beispielprofilerstellung aktivieren, aufrufen startMethodTracingSampling() (anstatt startMethodTracing() aufzurufen) mit einer angegebenen Stichprobenerhebung. Intervall. Das System erfasst regelmäßig Samples, bis Ihre App stopMethodTracing() aufruft.

Mehrere Logs speichern

Wenn Ihre App einen Methoden-Trace mehrmals startet und beendet, ohne einen neuen Namen für das Protokoll anzugeben, überschreibt das Gerät das ältere Protokoll mit dem neuen. Es wird also nur das neueste Protokoll aufbewahrt. Wenn Sie mehrere Protokolle auf Ihrem Gerät speichern möchten, benennen Sie das Protokoll jedes Mal dynamisch um, wenn Ihre App startMethodTracing() aufruft. Im folgenden Beispiel wird die Klasse SimpleDateFormat verwendet, um bei der Benennung jedes Trace-Logs das aktuelle Datum und die aktuelle Uhrzeit anzugeben:

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);

Auf Trace-Logs auf dem Gerät zugreifen

Nachdem das System das Protokoll auf Ihrem Gerät erstellt hat, können Sie auf die Datei auf folgende Arten zugreifen:

  • Device Explorer verwenden Klicke zum Öffnen des Geräte-Explorers auf Ansicht > Tool-Fenster > Geräte-Explorer (oder klicken Sie auf das Geräte-Explorer in der Symbolleiste des Toolfensters. Wie in Abbildung 1 dargestellt, findest du die .trace-Dateien auf der paketspezifischen Verzeichnisses an.

    Abbildung 1. Trace-Logs mit dem Geräte-Explorer ermitteln

  • Kopieren Sie die Datei mit dem Befehl adb pull auf Ihren lokalen Computer. Mit dem folgenden Befehl wird ein Trace-Log mit dem Namen sample.trace vom Gerät auf das Verzeichnis ~/Documents/trace-logs/ Ihres lokalen Computers.

    adb pull path-on-device/sample.trace ~/Documents/trace-logs/

Sie können dann Importieren Sie die Trace-Datei mit dem CPU-Profiler.