Một ứng dụng Android mà tôi hiện đang phát triển đã bị lỗi (cố định), do những gì đáng lẽ phải nêu ra một IndexOutOfBoundsException. Tôi đã truy cập một chuỗi trong phương thức doInBackground của một lớp mở rộng AyncTask, từ tham số biến đối số (tức là String ...). Tôi đã vô tình truy cập vào chỉ số 1 (không phải 0) của một chuỗi đối số biến một phần tử (hơi lúng túng ...). Khi ứng dụng đầu tiên gặp lỗi, tôi nhìn vào logcat của mình, (và nhiều lần nữa để xác nhận rằng tôi không điên) và không có dấu vết ngăn xếp cho một RuntimeException được tìm thấy. Tôi gặp tai nạn điện thoại của tôi khá thường xuyên và luôn luôn có một chút dấu vết ngăn xếp tốt đẹp cho tôi để xem xét và sửa chữa với, nhưng tôi đã bối rối bởi điều này. Dưới đây là phần thích hợp của logcat của tôi (mà không chứa stack trace cho một RuntimeException), sau một tuyên bố gỡ lỗi ngay trước khi dòng mã đã gây ra vụ tai nạn:Tại sao logcat android không hiển thị dấu vết ngăn xếp cho một ngoại lệ thời gian chạy?
W/dalvikvm(25643): threadid=11: thread exiting with uncaught exception (group=0x40c281f8)
D/dalvikvm(25643): GC_CONCURRENT freed 1249K, 25% free 12433K/16455K, paused 2ms+6ms
W/dalvikvm(25643): threadid=15: thread exiting with uncaught exception (group=0x40c281f8)
I/Process (25643): Sending signal. PID: 25643 SIG: 9
I/ActivityManager(5905): Process com.trade.nav.ges (pid 25643) has died.
W/ActivityManager(5905): Force removing r: app died, no saved state
I/WindowManager(5905): WIN DEATH: win
I/WindowManager(5905): WIN DEATH: win
I/SurfaceFlinger(1746): id=3848 Removed idx=2 Map Size=4
I/SurfaceFlinger(1746): id=3848 Removed idx=-2 Map Size=4
I/WindowManager(5905): WIN DEATH: win
I/power (5905): *** acquire_dvfs_lock : lockType : 1 freq : 1000000
D/PowerManagerService(5905): acquireDVFSLockLocked : type : DVFS_MIN_LIMIT frequency : 1000000 uid : 1000 pid : 5905 tag : ActivityManager
W/ActivityManager(5905): mDVFSLock.acquire()
Và sau đó, hoạt động khác bắt đầu. Để tham khảo, đây là mã mà gây ra tai nạn:
private class LoadImage extends AsyncTask<String, Integer, Bitmap> {
String url = "";
//...
public LoadImage(ImageView iv, Context c) {
//...
}
protected Bitmap doInBackground(String... urls) {
// urls has one element
url = urls[1];
//...
}
//...
}
Bất kỳ cái nhìn sâu sắc vào những gì đang xảy ra sẽ vui lòng cho tôi rất nhiều, như tôi tò mò về việc có bất cứ điều gì chưa bao giờ thấy như thế này trên internet. Cảm ơn.
Chỉnh sửa: Tôi không có bộ lọc thiết
Bạn đã thử bằng cách đặt mã ngoại lệ trong Try Catch Block? –
Bạn chắc chắn rằng bạn không có bất kỳ bộ lọc nào được chọn? – Varun
... vấn đề không phải là tôi cần phải ngăn chặn các mã từ việc nâng cao ngoại lệ thời gian chạy, tôi đã làm điều đó trong một phiên bản khác của mã (thay đổi số 1 thành 0). Vấn đề là phiên bản cũ của mã không bao giờ gây ra một dấu vết ngăn xếp ngoại lệ thời gian chạy để hiển thị trong logcat của tôi. Tôi muốn biết tại sao điều đó lại xảy ra. –