Ich möchte nur alle Dumps von Java VM-Threads erhalten, um zu sehen, was die Threads sperren und welche Threads darauf warten, einige Ressourcen zu entsperren. So etwas ist beschrieben here. Ich habe versucht, Zygote-Prozess zu töten, aber ohne Ergebnisse.Wie mache ich Java Thread Dump in Android?
Antwort
Wenn Sie in Eclipse zur DDMS-Ansicht wechseln, haben Sie einige Werkzeuge, um sich Threads anzusehen. Ist das wonach Sie suchen?
Ich vermute, Sie brauchen die Threads innerhalb einer App. Dazu können Sie die DDMS-Ansicht auf dem ADT Eclipse-Plugin verwenden. Hier ist das Dokument http://developer.android.com/tools/debugging/ddms.html#thread
Fast Ja. Ich muss noch wissen, was das Objekt gesperrt ist, zum Beispiel: - gesperrt <0x0000000780b7e688> (ein java.io.InputStreamReader) – Divano
Eclipse und DDMS sind veraltet, und Android Profiler wird nichts anzeigen. Lesen Sie weiter unten für meine Antwort. –
Der einfachste Weg ist mit DDMS, oder das ADT-Plugin in Eclipse. Eine grundlegende Anleitung finden Sie unter http://developer.android.com/tools/debugging/ddms.html. Kurz gesagt, gehen Sie in die Geräteansicht, wählen Sie die Anwendung aus, an der Sie interessiert sind, stellen Sie sicher, dass die Thread-Updates aktiviert sind, und wechseln Sie zur Ansicht Threads. Sie erhalten eine live-aktualisierte Liste von Threads in diesem Prozess. Durch Doppelklicken auf einen Thread wird ein Snapshot des aktuellen Stack-Status erstellt.
Sie können wählen Sie alle und kopieren Sie in den Thread-Dump zu kopieren & fügen Sie den Stack-Trace.
Wenn Sie ein Entwickler-/Root-Gerät haben, können Sie die Dalvik-VM bitten, Thread-Stacks zu löschen, indem Sie eine SIGQUIT
an den gewünschten App-Prozess senden. Zum Beispiel, wenn Sie die Stacks für alle Threads sehen möchten in der Kalender-App, können Sie etwas tun:
% adb shell ps | grep android.calendar
u0_a6 2596 127 912804 48296 ffffffff b6f62c10 S com.google.android.calendar
# 2596 is the process ID
% adb shell run-as com.google.android.colendar kill -3 2596
die logcat Ausgang sagen etwas wie:
I/dalvikvm(2596): Wrote stack traces to '/data/anr/traces.txt'
Also, ziehen Sie das:
% adb pull /data/anr/traces.txt .
Jedes Mal, wenn Sie einen Prozess signalisieren, werden die Protokolle an diese Datei angehängt. Es können auch andere Sachen da sein in, so müssen Sie für pid 2596
suchen:
----- pid 2596 at 2012-11-27 12:48:38 -----
Cmd line: com.google.android.calendar
DALVIK THREADS:
...
Der Vorteil dabei über die DDMS Thread-Ansicht ist, dass, wenn der Faden auf einem Monitor stecken, wird der Stack Dump geben Sie zeigen an, welches Objekt gesperrt ist und welcher Thread gerade die Sperre hält.
Der Zygote-Prozess ist hier nicht relevant; Per Definition wird keine App ausgeführt. Da es keinen JDWP-Thread hat und nicht auf SIGQUIT wartet, können Sie trotzdem keinen Stack-Trace herausholen.
Hinweis: Ich habe meinen Trace unter /data/anr/traces.txt.bugreport gefunden –
Es gibt einen einfacheren Weg, lesen Sie weiter unten. –
Nehmen Sie die Befehle von der answer, und alles zusammen, hier ist das folgende Skript. Wenn Sie es in die dump.sh-Datei einfügen und ausführen, wird es die benötigte PID finden, eine neue Datei mit dem aktuellen Zeitstempel erstellen und als nächstes wird der Thread-Dump dorthin geladen. Dieser Befehl kann nützlich sein, wenn eine sehr kurze Zeit zum Abrufen des Speicherauszugs benötigt wird. Stellen Sie vor der Verwendung sicher, dass Ablaufverfolgungen in die Datei /data/anr/traces.txt
eingegeben werden, oder ersetzen Sie diesen Wert im Skript.
#!/bin/sh
pid=`./adb shell ps | grep android.calendar | awk '{print $2}'`
echo $pid
f=$(date +%s%N)
echo $f
./adb shell run-as com.google.android.calendar kill -3 $pid
./adb pull /data/anr/traces.txt $f
Als Alternative Dateinamen kann man f=$(date +"%T.%6N")
verwenden Menschen lesbaren Zeitstempel zu erhalten. Es wäre einfacher, die benötigte Datei zu finden.
Es gibt einen einfacheren Weg, lies meine Antwort unten. –
Manchmal können Sie keine Haltepunkte verwenden. In diesen Fällen verwenden Sie dieses Skript. –
Debuggen Sie einfach Ihre App auf Ihrem Telefon in Android Studio; dann in der "Debug-Ansicht" Alt+5
drücken Sie einfach die "Kamera" -Taste in der unteren linken Ecke, um einen Dump aller Stacktraces zu erhalten, einschließlich der Sperren, die sie halten.
- 1. Wie mache ich einen Thread Dump mit MONO?
- 2. Wie mache ich einen anderen Thread Schlaf in Java
- 3. Python-Thread-Dump
- 4. Thread-Dump programmgesteuert/JDI (Java-Debugger-Schnittstelle)
- 5. Analysieren Thread-Dump eines Java-Prozesses
- 6. Speicherort für JVM-Thread-Dump
- 7. Wie Thread-Dump programmgesteuert mit JAVA-Code erfassen?
- 8. Wie mache ich NHibernate-Repositories Thread-sicher
- 9. Wie mache ich einen grundlegenden Thread in C++
- 10. Wie kann ich Thread-Dump für jnlp-Anwendung in Java generieren
- 11. Was ist die Bedeutung von "Thread Dump"
- 12. Wie erstelle ich einen Thread-Dump über JMX?
- 13. Wie mache ich Systembefehlsaufrufe in Java/Groovy?
- 14. Wie mache ich Timer in Java?
- 15. Java-Thread-Dump: WARTEN (auf Objektmonitor) - Worauf wartet es?
- 16. Wie mache ich einen Piepton in Android?
- 17. Generieren Sie einen Java-Thread-Dump, ohne neu zu starten.
- 18. Wie erstelle ich einen Thread-Dump einer Java Web Start-Anwendung?
- 19. Simple Thread Management - Java - Android
- 20. Wie mache ich meine ArrayList Thread-Safe? Ein anderer Ansatz für Probleme in Java?
- 21. Wie mache ich ein verschachteltes Json-Objekt in Java?
- 22. Wie mache ich HTTP-Bereinigung von Java?
- 23. Wie mache ich Java-Anwendungen Standalone?
- 24. Java - Was mache ich falsch?
- 25. Wie mache ich einen Thread mit eckigen js
- 26. Java geparkter Thread
- 27. Wie mache ich meine Komponente Entity System Thread sicher?
- 28. iphone - wie mache ich einen Thread läuft schneller
- 29. Wie beobachte ich den aufrufenden Thread in Java Rx?
- 30. Android, wenn ich syncronized in einem Thread
Fast Ja. Ich muss noch wissen, was das Objekt gesperrt ist, zum Beispiel: - gesperrt <0x0000000780b7e688> (ein java.io.InputStreamReader) – Divano
Diese Antwort ist veraltet, da es kein Eclipse mehr gibt. –