Khi StrictMode của Android phát hiện một đối tượng bị rò rỉ (ví dụ: hoạt động) vi phạm, sẽ rất hữu ích nếu tôi có thể ghi lại một đống dữ liệu tại thời điểm đó. Không có cách nào rõ ràng, tuy nhiên, để cấu hình nó để làm điều này. Có ai biết về một số thủ thuật có thể được sử dụng để đạt được nó hay không, ví dụ: một cách để thuyết phục hệ thống chạy một đoạn mã cụ thể ngay trước khi án tử hình được triệu tập? Tôi không nghĩ StrictMode ném ngoại lệ, vì vậy tôi không thể sử dụng mẹo được mô tả ở đây: Is there a way to have an Android process produce a heap dump on an OutOfMemoryError?Android StrictMode và heap dumps
5
A
Trả lời
7
Không ngoại lệ, nhưng StrictMode
không in trước khi chấm dứt. Vì vậy, đây là một hack, nhưng nó hoạt động, và khi nó chỉ sẽ được kích hoạt trên debug xây dựng tôi con số đó là tốt ... :)
trong onCreate()
:
//monitor System.err for messages that indicate the process is about to be killed by
//StrictMode and cause a heap dump when one is caught
System.setErr (new HProfDumpingStderrPrintStream (System.err));
và lớp gọi :
private static class HProfDumpingStderrPrintStream extends PrintStream
{
public HProfDumpingStderrPrintStream (OutputStream destination)
{
super (destination);
}
@Override
public synchronized void println (String str)
{
super.println (str);
if (str.equals ("StrictMode VmPolicy violation with POLICY_DEATH; shutting down."))
{
// StrictMode is about to terminate us... don't let it!
super.println ("Trapped StrictMode shutdown notice: logging heap data");
try {
android.os.Debug.dumpHprofData(app.getDir ("hprof", MODE_WORLD_READABLE) + "/strictmode-death-penalty.hprof");
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
(nơi app
là một lĩnh vực tĩnh trong các lớp bên ngoài chứa một tham chiếu đến bối cảnh ứng dụng, để dễ tham khảo)
chuỗi nó phù hợp đã tồn tại không thay đổi từ việc phát hành bánh gừng lên đến đậu thạch, nhưng về mặt lý thuyết có thể thay đổi trong các phiên bản sau, vì vậy nó đáng để kiểm tra các phiên bản mới để đảm bảo chúng vẫn sử dụng cùng một thông điệp.
Các vấn đề liên quan
- 1. Android WebView gây ra vi phạm StrictMode
- 2. Android dalvikvm-heap: Kẹp mục tiêu GC heap
- 3. Android Hiểu kích thước Heap
- 4. Bộ nhớ Heap Android tăng
- 5. StrictMode cho các phiên bản nền tảng thấp hơn
- 6. AppDomains và GC Heap
- 7. Chiến lược phân mảnh Heap của Android?
- 8. Android phát triển vùng heap frag
- 9. StrictMode phàn nàn về InputStream không bị đóng
- 10. malloc() và bộ nhớ heap
- 11. Sự khác nhau giữa phun heap, heap overflow, heap overrun?
- 12. STL container trên stack và heap
- 13. Kích thước Heap JavaScript và Chrome Tăng
- 14. Không thể thực hiện dex: Vùng heap Java Không gian heap Java
- 15. mục đích máy ảnh và hàng đợi ưu tiên trong Android
- 16. STL cho Fibonacci Heap?
- 17. Hết dung lượng heap
- 18. Ổ cứng Heap Java
- 19. Sử dụng heap libGL
- 20. Phân bổ bộ nhớ và bản phân vùng Heap
- 21. Quản lý bộ nhớ, Heap Corruption và C++
- 22. Điều gì sẽ xảy ra khi Stack và Heap Collide
- 23. Địa chỉ của Ngăn xếp và Heap trong C++
- 24. Hibernate, SessionFactoryObjectFactory và OutOfMemoryError: không gian java heap
- 25. C++ Phân bổ bộ nhớ trên heap và ngăn xếp?
- 26. Tệp lớn trong Clojure và lỗi không gian heap Java
- 27. Đối tượng trên heap và tài liệu tham khảo
- 28. constantPoolClass trong Java heap?
- 29. PriorityQueue/Heap Update
- 30. java.lang.OutOfMemoryError: Vùng heap Java