2011-11-21 13 views
24

मैं स्टैक ट्रेस प्रिंट करना चाहता हूं क्योंकि इस समय मेरे पास यह चल रहा है।एक अपवाद के लिए स्टैकट्रैक प्रिंट करने के लिए कैसे करें Android

} catch (IOException e) { 
    throw new Error("Copying Failed"); 
} 

और मैं e.stacktrace();

मैं यह करने के लिए कैसे करते हैं मुद्रित करने के लिए कहा गया है?

उत्तर

60
} catch (IOException e) { 
    Log.e("YOUR_APP_LOG_TAG", "I got an error", e); 
} 

और उत्पादन के लिए LogCat की जाँच करें।

+0

System.err पर इस बेहतर है? –

+0

@ इगोर जी .: हां, इगोर, यह System.err पर बेहतर है। यदि आप बस System.err का उपयोग करते हैं, तो आप LogCat आउटपुट में अपना ऐप टैग नहीं देख पाएंगे। –

+5

मुझे केवल 'java.lang.NullPointerException' मिलता है लेकिन यह एक स्टैकट्रैक नहीं है, यह केवल त्रुटि है!, मैं पूरा पता कैसे प्राप्त कर सकता हूं? –

1

यह सबसे अधिक संभावना है आप e.printStackTrace(); के माध्यम से स्टैक ट्रेस मुद्रित करने के लिए अनुरोध किया गया है ...

} catch (IOException e) { 
    e.printStackTrace(); 
    throw new Error("Copying Failed"); 
} 
12

एंड्रॉइड में आपको लॉग विधियों का उपयोग करना चाहिए जो एंड्रॉइड द्वारा उपयोग किए गए लॉगकैट लॉग व्यूअर के साथ अच्छी तरह से काम करते हैं।

} catch (IOException e) { 
    Log.e("YOUR ERROR TAG HERE", "Copying failed", e); 
} 

Log.e विधि है कि एक तर्क आप यह सुनिश्चित करें कि लॉग वर्ग स्टैकट्रेस लेने के लिए और इसे सही ढंग से लॉग इन करें Logcat लिए होगा के रूप में एक फेंकने योग्य लेता है का उपयोग करना। यदि आप e.printStackTrace का उपयोग करते हैं तो यह सामान्य जावा लॉगिंग विधियों का उपयोग करेगा और यह लॉगकैट में सही ढंग से दिखाई नहीं देगा और कुछ मामलों में कक्षा में कूदने के लिए लॉगकैट में कक्षा के नाम पर डबल क्लिक करना संभव नहीं होगा और इसमें उल्लिखित विधि स्टैक ट्रेस। शून्य द्वारा विभाजन के लिए

प्रिंट स्टैकट्रेस इस तरह दिखेगा:

11-21 20:55:47.360: W/System.err(989): java.lang.ArithmeticException: divide by zero 
11-21 20:55:47.379: W/System.err(989): at test.tabs.TabChooser.onCreate(TabChooser.java:15) 
11-21 20:55:47.390: W/System.err(989): at android.app.Activity.performCreate(Activity.java:4465) 
11-21 20:55:47.410: W/System.err(989): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049) 
11-21 20:55:47.410: W/System.err(989): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1919) 
11-21 20:55:47.420: W/System.err(989): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1980) 
11-21 20:55:47.420: W/System.err(989): at android.app.ActivityThread.access$600(ActivityThread.java:122) 
11-21 20:55:47.420: W/System.err(989): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1146) 
11-21 20:55:47.420: W/System.err(989): at android.os.Handler.dispatchMessage(Handler.java:99) 
11-21 20:55:47.420: W/System.err(989): at android.os.Looper.loop(Looper.java:137) 
11-21 20:55:47.420: W/System.err(989): at android.app.ActivityThread.main(ActivityThread.java:4340) 
11-21 20:55:47.430: W/System.err(989): at java.lang.reflect.Method.invokeNative(Native Method) 
11-21 20:55:47.430: W/System.err(989): at java.lang.reflect.Method.invoke(Method.java:511) 
11-21 20:55:47.430: W/System.err(989): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
11-21 20:55:47.430: W/System.err(989): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
11-21 20:55:47.430: W/System.err(989): at dalvik.system.NativeStart.main(Native Method) 

अपवाद एक चेतावनी के रूप लॉग ऑन है और लॉग टैग बहुत उपयोगी नहीं है।

शून्य द्वारा विभाजन का सही लॉगिंग इस तरह दिखेगा:

11-21 21:03:32.480: E/YOUR ERROR TAG HERE(1356): Copying failed 
11-21 21:03:32.480: E/YOUR ERROR TAG HERE(1356): java.lang.ArithmeticException: divide by zero 
11-21 21:03:32.480: E/YOUR ERROR TAG HERE(1356): at test.tabs.TabChooser.onCreate(TabChooser.java:16) 
11-21 21:03:32.480: E/YOUR ERROR TAG HERE(1356): at android.app.Activity.performCreate(Activity.java:4465) 
11-21 21:03:32.480: E/YOUR ERROR TAG HERE(1356): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049) 
11-21 21:03:32.480: E/YOUR ERROR TAG HERE(1356): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1919) 
11-21 21:03:32.480: E/YOUR ERROR TAG HERE(1356): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1980) 
11-21 21:03:32.480: E/YOUR ERROR TAG HERE(1356): at android.app.ActivityThread.access$600(ActivityThread.java:122) 
11-21 21:03:32.480: E/YOUR ERROR TAG HERE(1356): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1146) 
11-21 21:03:32.480: E/YOUR ERROR TAG HERE(1356): at android.os.Handler.dispatchMessage(Handler.java:99) 
11-21 21:03:32.480: E/YOUR ERROR TAG HERE(1356): at android.os.Looper.loop(Looper.java:137) 
11-21 21:03:32.480: E/YOUR ERROR TAG HERE(1356): at android.app.ActivityThread.main(ActivityThread.java:4340) 
11-21 21:03:32.480: E/YOUR ERROR TAG HERE(1356): at java.lang.reflect.Method.invokeNative(Native Method) 
11-21 21:03:32.480: E/YOUR ERROR TAG HERE(1356): at java.lang.reflect.Method.invoke(Method.java:511) 
11-21 21:03:32.480: E/YOUR ERROR TAG HERE(1356): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
11-21 21:03:32.480: E/YOUR ERROR TAG HERE(1356): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
11-21 21:03:32.480: E/YOUR ERROR TAG HERE(1356): at dalvik.system.NativeStart.main(Native Method) 

अपवाद सही ढंग से अपनी लॉग टैग के साथ एक त्रुटि के रूप में लॉग ऑन है और लॉग संदेश।

21

एक अन्य विधि, बहुत उपयोगी:

try 
{ 
... 
} 
catch (Exception e) 
{ 
    Log.e(APP_TAG, "STACKTRACE"); 
    Log.e(APP_TAG, Log.getStackTraceString(e)); 
} 
+0

आपने 'APP_TAG' कहां सेट किया था? या तुमने नहीं किया? –

+1

@ फ्रांसिस्को कोरलसमोरालेस: 'APP_TAG' निरंतर चर के साथ आपके प्रोजेक्ट के टैग का नामकरण करने के लिए एक आम सम्मेलन है। आप इसे अपने एप्लिकेशन टैग नाम के अनुसार भी परिभाषित कर सकते हैं। – sligocki

संबंधित मुद्दे