অ্যান্ড্রয়েড - লগ করতে সম্পূর্ণ ব্যতিক্রম ব্যাকট্রেস মুদ্রণ করুন


94

আমার একটি ট্রাই / ক্যাচ ব্লক রয়েছে যা একটি ব্যতিক্রম ছুঁড়ে ফেলেছে এবং আমি অ্যান্ড্রয়েড ডিভাইস লগটিতে ব্যতিক্রম সম্পর্কিত তথ্য দেখতে চাই।

আমি আমার বিকাশ কম্পিউটার থেকে এই আদেশটি দিয়ে মোবাইল ডিভাইসের লগটি পড়ি:

/home/dan/android-sdk-linux_x86/tools/adb shell logcat

আমি প্রথমে চেষ্টা করেছিলাম:

try {
    // code buggy code
} catch (Exception e)
{
    e.printStackTrace();
}

কিন্তু এটি লগতে কিছু মুদ্রণ করে না। এটি দুঃখজনক কারণ এটি অনেক সাহায্য করতে পারে।

আমি যেটি অর্জন করেছি তা হ'ল:

try {
    // code buggy code
} catch (Exception e)
{
    Log.e("MYAPP", "exception: " + e.getMessage());             
    Log.e("MYAPP", "exception: " + e.toString());
}

খুব সন্তুষ্ট না ছাড়া কিছুই চেয়ে ভাল।

আপনি কি জানেন লগটিতে পুরো ব্যাকট্রেস কীভাবে মুদ্রণ করবেন?

ধন্যবাদ

উত্তর:


166
try {
    // code that might throw an exception
} catch (Exception e) {
    Log.e("MYAPP", "exception", e);
}

আরও তথ্যের সাথে আরও স্পষ্টভাবে

(যেহেতু এটি সম্পর্কে এটি প্রাচীনতম প্রশ্ন))

ত্রি-যুক্তি অ্যান্ড্রয়েড লগ পদ্ধতি Exceptionতৃতীয় প্যারামিটার হিসাবে সরবরাহিত স্ট্যাক ট্রেস মুদ্রণ করবে । উদাহরণ স্বরূপ

Log.d(String tag, String msg, Throwable tr)

trব্যতিক্রম কোথায় ।

এই মন্তব্য অনুসারে সেই লগ পদ্ধতিগুলি " getStackTraceString()পর্দার পিছনে ... পদ্ধতিটি ব্যবহার করে " তা করতে।


4
এছাড়াও, আমার শৈলী: লগ.ই (e.getClass ()। GetName (), e.getMessage (), ই);
বিকাশ

27
E.getMessage () ব্যবহার করে সাবধান থাকুন - getMessage () নিক্ষেপ করা হয়েছে এমন ধরণের ব্যতিক্রমের উপর নির্ভর করে ফিরতে পারে, যা নিজেই ব্যতিক্রম ঘটায় কারণ লগ পদ্ধতিতে মেসেজ প্যারামিটার হিসাবে নাল সমর্থিত নয়। এখানে
ইউনিট

তদুপরি, দ্বিতীয় প্যারামিটারে কী ধরণের কোডের কারণে এই ব্যতিক্রম ঘটেছিল তা বর্ণনা করে আরও বোঝা যায়। বার্তাটি ইতিমধ্যে যাইহোক আউটপুট অন্তর্ভুক্ত করা হয়েছে।
ইবোমাইক

4
@ ইউনিক যা বলেন তা খুব গুরুত্বপূর্ণ। উত্তরে উল্লিখিত হিসাবে লগটি ব্যবহার করা ভাল কারণ এটি ইতিমধ্যে স্ট্যাকের
বুডি

4
@ সাইনফটএইমজ আপনি কেবলমাত্র ডকুমেন্টেশনটি পড়তে পারেন। এটি এমন একটি শনাক্তকারী যা লগটি দেখায় যা লগটিকে ফিল্টার করা এবং কোন অ্যাপ (এবং এর কোন অংশ) বার্তাটি লিখেছিল তা দেখতে আপনার পক্ষে সহজ করে তোলে। বিকাশকারী.অ্যান্ড্রয়েড.
com

52

এই সহায়ক সহায়কটিও দুর্দান্ত কাজ করে যেহেতু ব্যতিক্রমগুলিও একটি থ্রোয়েবল

    try{
        //bugtastic code here
    }
    catch (Exception e)
    {
         Log.e(TAG, "Exception: "+Log.getStackTraceString(e));
    }

এটি অ্যাপ্লিকেশন এবং অবস্থান নির্দিষ্ট করতে ব্যবহৃত একটি স্ট্রিং। যে কোনও স্ট্রিং সেখানে করবে।
জর্জ

8
catch (Exception e) {
  ByteArrayOutputStream baos = new ByteArrayOutputStream();
  PrintStream stream = new PrintStream( baos );
  e.printStackTrace(stream);
  stream.flush();
  Log.e("MYAPP", new String( baos.toByteArray() );
}

বা ... তুমি জানো ... ইবোমাইক কী বলেছে।



2

e.printStackTrace () এটি আমার কাছে মুদ্রণ করে। আমি মনে করি না আপনি লগক্যাটটি সঠিকভাবে চালাচ্ছেন। এটিকে শেলের মধ্যে চালাবেন না, কেবল চালান

/home/dan/android-sdk-linux_x86/tools/adb logcat


1

স্ট্যান্ডার্ড আউটপুট এবং ত্রুটি আউটপুট ডিফল্টরূপে / dev / নালকে নির্দেশিত হয় যাতে এটি সমস্ত হারিয়ে যায়। আপনি যদি এই আউটপুটটি লগ করতে চান তবে আপনাকে এখানে দেখানো "স্টাডআউট এবং স্টেডার দেখছি" নির্দেশাবলী অনুসরণ করতে হবে



0

অ্যান্ড্রয়েডের প্রসঙ্গে, আমাকে একটি স্ট্রিংয়ের ব্যতিক্রম কাস্ট করতে হয়েছিল:

try {
    url = new URL(REGISTRATION_PATH);
    urlConnection = (HttpURLConnection) url.openConnection();
} catch(MalformedURLException e) {
    Log.i("MALFORMED URL", String.valueOf(e));
} catch(IOException e) {
    Log.i("IOException", String.valueOf(e));
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.