Eine Android-Anwendung, die ich gerade entwickle, stürzte ab (behoben das), aufgrund dessen, was eine IndexOutOfBoundsException ausgelöst haben sollte. Ich habe auf eine Zeichenfolge in der doInBackground-Methode einer Klasse zugegriffen, die die Option "AlyncTask" über den Parameter "variable arguments" (dh String ...) erweitert. Ich habe versehentlich auf den Index 1 (nicht 0) einer Variablenstring-Zeichenfolge mit einem Element zugegriffen (leicht peinlich ...). Als die Anwendung zum ersten Mal abgestürzt ist, habe ich mein logcat angeschaut (und mehrmals, um zu bestätigen, dass ich nicht verrückt war) und es gab keine Stack-Trace für eine RuntimeException. Ich stürze mein Handy ziemlich oft und es gibt immer eine nette kleine Stack-Spur, auf die ich schauen und reparieren kann, aber ich war verwirrt. Hier ist der betreffende Abschnitt meines logcat (die für eine Runtime keinen Stack-Trace enthält), nach einer Debug-Anweisung unmittelbar vor der Codezeile, die den Absturz verursacht wurde:Warum zeigt Android Logcat den Stack-Trace für eine Laufzeitausnahme nicht an?
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()
Und danach, eine andere Tätigkeit beginnt. Als Referenz hier ist der Code, der den Absturz verursacht:
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];
//...
}
//...
}
Einsicht in das, was mir gefallen würde stark geschieht, da ich neugierig bin auf dem Internet wie diese nie etwas gesehen haben. Danke.
Edit: Ich habe keinen Filter
gesetzt
Haben Sie versucht, den Ausnahmecode in Try Catch Block zu setzen? –
Sind Sie sicher, dass Sie keinen Filter ausgewählt haben? – Varun
... das Problem ist nicht, dass ich verhindern muss, dass der Code die Laufzeitausnahme anhebt, ich habe das bereits in einer anderen Version des Codes (änderte die Nummer 1 in eine 0). Das Problem besteht darin, dass die alte Version des Codes nie dazu führte, dass eine Laufzeitausnahmestapel-Ablaufverfolgung in meinem Logcat angezeigt wurde. Ich möchte wissen, warum das passieren würde. –