Tôi chỉ muốn lấy tất cả các bãi từ các chủ đề máy ảo java, để xem chủ đề khóa và chủ đề nào đang chờ để mở khóa một số tài nguyên. Một cái gì đó như được mô tả here. Tôi đã cố gắng để giết quá trình Zygote nhưng không có kết quả.Làm thế nào để làm cho Java Thread Dump trong Android?
Trả lời
Nếu bạn chuyển sang chế độ xem DDMS trong Eclipse, bạn có một số công cụ để xem chuỗi. Đó là những gì bạn đang tìm kiếm?
Tôi đoán bạn cần các chuỗi trong ứng dụng. Đối với điều này, bạn có thể sử dụng chế độ xem DDMS trên plugin eclipse ADT. Dưới đây là doc http://developer.android.com/tools/debugging/ddms.html#thread
Hầu như có. Tôi chưa biết đối tượng bị khóa, ví dụ: - bị khóa <0x0000000780b7e688> (một java.io.InputStreamReader) – Divano
Eclipse và DDMS không còn được dùng nữa và Android Profiler sẽ không hiển thị bất kỳ thứ gì. Đọc dưới đây cho câu trả lời của tôi. –
Cách dễ nhất là với DDMS hoặc plugin ADT trong Eclipse. Xem http://developer.android.com/tools/debugging/ddms.html để được hướng dẫn cơ bản. Trong ngắn hạn, hãy vào màn hình Device, chọn ứng dụng bạn quan tâm, đảm bảo cập nhật luồng được bật và chuyển sang chế độ xem Chủ đề. Bạn sẽ nhận được một danh sách các chủ đề được cập nhật trực tiếp trong quá trình đó. Nhấp đúp vào một chuỗi sẽ lấy một ảnh chụp nhanh trạng thái chồng hiện tại.
Bạn có thể sử dụng chọn tất cả và sao chép trong kết xuất chuỗi để sao chép & dán theo dõi ngăn xếp.
Nếu bạn có thiết bị phát triển/bắt nguồn từ, bạn có thể yêu cầu máy ảo Dalvik đổ ngăn xếp luồng bằng cách gửi SIGQUIT
đến quy trình ứng dụng mà bạn quan tâm. Ví dụ: nếu bạn muốn xem ngăn xếp cho tất cả chuỗi trong ứng dụng Lịch, bạn có thể làm một cái gì đó như thế này:
% 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
sản lượng logcat sẽ nói điều gì đó như:
I/dalvikvm(2596): Wrote stack traces to '/data/anr/traces.txt'
Vì vậy, kéo rằng:
% adb pull /data/anr/traces.txt .
Mỗi khi bạn báo hiệu một quá trình, nhật ký sẽ được thêm vào tệp đó. Có thể có những thứ khác ở đó, vì vậy bạn cần phải tìm kiếm pid 2596
:
----- pid 2596 at 2012-11-27 12:48:38 -----
Cmd line: com.google.android.calendar
DALVIK THREADS:
...
Ưu điểm của việc làm này trên quan điểm chủ đề DDMS là, nếu thread là bị mắc kẹt trên một màn hình, ngăn xếp bãi sẽ cung cấp cho bạn chỉ ra đối tượng nào bị khóa và luồng nào hiện đang giữ khóa.
Quy trình zygote không có liên quan ở đây; theo định nghĩa, nó không chạy một ứng dụng. Vì nó không có một chuỗi JDWP, và không nghe SIGQUIT, bạn không thể có được một dấu vết ngăn xếp ra khỏi nó anyway.
Lưu ý: Tôi đã tìm thấy dấu vết của mình tại /data/anr/traces.txt.bugreport –
Có cách dễ dàng hơn, hãy đọc bên dưới. –
Lấy các lệnh từ answer và tập hợp tất cả lại với nhau, dưới đây là tập lệnh sau. Đặt nó vào tệp dump.sh và thực hiện, nó sẽ tìm thấy PID cần thiết, tạo một tệp mới với dấu thời gian hiện tại và tiếp theo nó sẽ tìm nạp Thread-Dump vào nó. Lệnh này có thể hữu ích khi có một khoảng thời gian rất ngắn để tìm nạp kết xuất. Trước khi sử dụng, hãy đảm bảo rằng các dấu vết được đưa vào tệp /data/anr/traces.txt
hoặc thay thế giá trị này trong tập lệnh.
#!/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
Là tên tệp thay thế, bạn có thể sử dụng f=$(date +"%T.%6N")
để nhận dấu thời gian có thể đọc được của con người. Nó sẽ dễ dàng hơn để tìm tập tin cần thiết.
Có cách dễ dàng hơn, hãy đọc câu trả lời của tôi bên dưới. –
Đôi khi bạn không thể sử dụng các điểm ngắt. Đối với những trường hợp bạn sử dụng tập lệnh này. –
Chỉ cần gỡ lỗi ứng dụng của bạn trên điện thoại trong Android Studio; sau đó trong "Chế độ xem gỡ lỗi" Alt+5
, chỉ cần nhấn nút "Máy ảnh" ở góc dưới cùng bên trái, để có được một bãi chứa tất cả stacktraces, bao gồm cả khóa mà chúng đang giữ.
- 1. kill -3 để lấy java thread dump
- 2. Làm thế nào an toàn thread là enum trong java?
- 3. Làm thế nào để std :: thread ngủ
- 4. Làm thế nào để nhập mysql dump vào SQLyog
- 5. Làm thế nào để nhập MYSQL Dump vào Amazon RDS
- 6. Làm thế nào để có được Id thread trong C#
- 7. làm thế nào để tiêu diệt thread trong java sau khi hoàn thành nhiệm vụ
- 8. Làm thế nào để hiểu được phương thức chờ và thông báo trong Java Thread?
- 9. Làm thế nào để tiêu diệt một Thread trong Java đang ở trạng thái RUNNING?
- 10. Làm thế nào để tham khảo các thread hiện hành
- 11. Làm thế nào để dừng/ngắt một tăng :: thread?
- 12. Làm thế nào để mô phỏng đói # # thread
- 13. Làm thế nào để truyền tham số cho phương thức ThreadStart trong Thread?
- 14. Làm thế nào để làm cho Animated Android Live Wallpaper?
- 15. Làm thế nào để wait() lấy lại Khóa trong Java
- 16. Tạo java dump khi OutOfMemory
- 17. Làm thế nào để làm slide để nút trong android
- 18. Java: làm thế nào để làm đệm đôi trong Swing?
- 19. Làm thế nào để tải mysql dump vào cơ sở dữ liệu hsqldb?
- 20. Làm thế nào để làm chủ Java?
- 21. làm thế nào để làm cho hình ảnh động cho cửa sổ popup trong android
- 22. Làm thế nào để làm cho bàn chải tùy chỉnh cho vải trong Android?
- 23. Làm thế nào để tôi nhận được giá trị trả về từ phương thức Runnable bên trong Thread trong Java?
- 24. làm thế nào để làm diễn viên (erlang) trong java?
- 25. Làm cách nào để tạo ArrayList Thread-Safe của tôi? Một cách tiếp cận khác cho vấn đề trong Java?
- 26. Làm thế nào để chương trình một sequencer âm nhạc đơn giản dành cho Android (Java)
- 27. Android làm thế nào để chạyOnUiThread trong lớp khác?
- 28. (Làm thế nào) TPL sử dụng (CLR) Thread Pool?
- 29. Làm thế nào để làm cho văn bản mờ dần trong và ngoài trong Android?
- 30. Làm thế nào để làm cho khu vực vẽ Canvas trong suốt trong android?
Hầu như có. Tôi chưa biết đối tượng bị khóa, ví dụ: - bị khóa <0x0000000780b7e688> (một java.io.InputStreamReader) – Divano
Câu trả lời này đã lỗi thời vì không còn Eclipse nữa. –