আমি কীভাবে জাভা স্ট্যাক ট্রেস ডাম্পের প্রদর্শিত লাইনের সংখ্যা বৃদ্ধি করব?


উত্তর:


122

আপনার দরকার নেই; এই তথ্য স্ট্যাক ট্রেস অন্য কোথাও উপস্থিত। এর ডক্স থেকে printStackTrace():

অক্ষরযুক্ত লাইন উপস্থিতি নোট করুন "..."। এই রেখাগুলি ইঙ্গিত দেয় যে এই ব্যতিক্রমের জন্য স্ট্যাক ট্রেসের অবশিষ্ট অংশগুলি ব্যতিক্রমের স্ট্যাক ট্রেসটির নীচে থেকে ফ্রেমের সংখ্যার সাথে মেলে যা এই ব্যতিক্রমের কারণে ঘটেছিল ("সংলগ্ন" ব্যতিক্রম)।

এই শর্টহ্যান্ডটি সাধারণ ক্ষেত্রে আউটপুটটির দৈর্ঘ্যকে হ্রাস করতে পারে যেখানে "কার্যকারী ব্যতিক্রম" ধরা পড়ে একই পদ্ধতি থেকে মোড়ানো ব্যতিক্রম নিক্ষেপ করা হয়।

অন্য কথায়, "... x more"একমাত্র শৃঙ্খলযুক্ত ব্যতিক্রমে উপস্থিত হয় এবং কেবল যখন xস্ট্যাক ট্রেসের শেষ লাইনগুলি ইতিমধ্যে অন্য জড়িত ব্যতিক্রমের স্ট্যাক ট্রেসের অংশ হিসাবে উপস্থিত থাকে।

মনে করুন যে কোনও পদ্ধতি ব্যতিক্রম ফু কে ধরেছে, ব্যতিক্রম বারে এটি জড়িয়ে রাখে এবং বারটি ছুড়ে ফেলে। তারপরে ফু এর স্ট্যাক ট্রেসটি ছোট করা হবে। যদি আপনি কোনও কারণে পুরো ট্রেস চান, আপনার যা করতে হবে তা হ'ল ...ফু এর স্ট্যাক ট্রেসের আগে শেষ লাইনটি গ্রহণ করা এবং বারের স্ট্যাক ট্রেসটিতে এটি সন্ধান করা; এই লাইনের নীচে সবকিছুই ফু এর স্ট্যাক ট্রেসে মুদ্রিত হত in


শেষ অনুচ্ছেদটি বিভ্রান্তিমূলক। কোনও ওভারল্যাপ থাকবে না, এর আগে লাইনটি ...প্রথম ফ্রেম যা আলাদা which তবে এটি অন্তত একই শ্রেণিতে থাকবে যা এটি সন্ধানে সহায়তা করে।
Marcono1234

5

আপনার জন্য একটি পদ্ধতিতে দ্রুত অনুমান করুন।

static void printLongerTrace(Throwable t){
    for(StackTraceElement e: t.getStackTrace())
        System.out.println(e);
}

3

থ্রোয়েবল.প্রিন্টস্ট্যাকট্রেস () এর ডকুমেন্টেশন থেকে স্ট্যাক ট্রেস নেওয়া যাক :

HighLevelException: MidLevelException: LowLevelException
    at Junk.a(Junk.java:13)
    at Junk.main(Junk.java:4)
Caused by: MidLevelException: LowLevelException
    at Junk.c(Junk.java:23)
    at Junk.b(Junk.java:17)
    at Junk.a(Junk.java:11)
    ... 1 more
Caused by: LowLevelException
    at Junk.e(Junk.java:30)
    at Junk.d(Junk.java:27)
    at Junk.c(Junk.java:21)
    ... 3 more

নীচের অংশে সবচেয়ে নেস্টেড ("মূল কারণ") থেকে কারণগুলি মুদ্রিত স্ট্যাক ট্রেসের অন্তর্গত যা থেকে প্রদর্শিত হয়।

এক্ষেত্রে মূল কারণটি হ'ল LowLevelException, যা ঘটেছিল MidLevelException, যার কারণ ছিল HighLevelException

সম্পূর্ণ স্ট্যাক ট্রেস পেতে আপনাকে ঘেরের ব্যতিক্রমগুলির ফ্রেমগুলি দেখতে হবে (এবং এর ঘেরটি ব্যতিক্রমগুলি):

  1. কতগুলি ফ্রেম বাদ দেওয়া হয়েছে তা দেখুন: "... এক্স আরও"
  2. ঘেরযুক্ত ব্যতিক্রমটি বাদ দেওয়া ফ্রেমগুলির সন্ধান করুন
    1. কত ফ্রেম পর্যন্ত লুক বাদ দেওয়া হয়েছে: "... ওয়াই আরো"
    2. স্ট্যাক ট্রেসে প্রথম এক্স - ওয়াই ফ্রেম যুক্ত করুন
  3. যদি Y> 0, বাদ দেওয়া ফ্রেমের সংখ্যা হিসাবে এটির সাথে পদক্ষেপ 2 পুনরাবৃত্তি করুন

সুতরাং যদি আমরা সম্পূর্ণ স্ট্যাক ট্রেস পেতে চাই তবে আমরা LowLevelExceptionনিম্নলিখিতটি করতাম:

  1. কতগুলি ফ্রেম বাদ দেওয়া হয়েছে তা দেখুন: "... 3 আরও"
  2. ঘেরযুক্ত ব্যতিক্রম ( MidLevelException) বাদ দেওয়া ফ্রেমগুলি সন্ধান করুন
    1. 1 ফ্রেম বাদ দেওয়া হয়েছে ("... আরও 1 ")
    2. স্ট্যাক ট্রেসটিতে প্রথম 2 (3 - 1) ফ্রেম যুক্ত করুন
  3. বাদ দেওয়া ফ্রেমের সংখ্যা হিসাবে 1 সহ 1 পদক্ষেপটি পুনরাবৃত্তি করুন
    1. MidLevelException( HighLevelException) এর সংলগ্ন ব্যতিক্রমটি দেখুন
    2. স্ট্যাক ট্রেসটিতে প্রথম 1 ফ্রেম যুক্ত করুন

আপনার সম্পূর্ণ স্ট্যাক ট্রেস এর পরে দেখে মনে হচ্ছে:

LowLevelException
    at Junk.e(Junk.java:30)
    at Junk.d(Junk.java:27)
    at Junk.c(Junk.java:21)
    // From MidLevelException stack trace
    at Junk.b(Junk.java:17)
    at Junk.a(Junk.java:11)
    // From HighLevelException stack trace
    at Junk.main(Junk.java:4)

পার্শ্ব নোট:

  • এমন কোনও ক্ষেত্রে থাকতে পারে যেখানে কোনও ফ্রেম তালিকাভুক্ত নয়, যেমন:

    HighLevelException: MidLevelException
        at Junk.main(Junk.java:4)
    Caused by: MidLevelException
        ... 1 more
    

    এই ঘটতে পারে কারণ এটি একই লাইনে তৈরি করা হয়েছে: new HighLevelException(new MidLevelException())। এতে বিভ্রান্ত হবেন না, উপরে বর্ণিত পদ্ধতিটি এখনও কাজ করে, ব্যতিক্রম থেকে ব্যবহারের জন্য কেবল কোনও ফ্রেম নেই, এটি বন্ধ করে দিয়ে চালিয়ে যান।

  • কিছু ক্ষেত্রে আপনি প্রথম ফ্রেমটি বাদ পড়েছিলেন যা বাদ দেওয়া হয়নি (উপরের লাইনটি ... X more) দেখে নিজেকে বাঁচাতে পারেন । আপনি যদি জানেন যে কোন পদ্ধতিগুলি সেই লাইনে পদ্ধতিটিকে কল করে আপনি সরাসরি ঘেরযুক্ত ব্যতিক্রমের ফ্রেমে কলকারীদের জন্য অনুসন্ধান করতে পারেন:

    HighLevelException: MidLevelException: LowLevelException
        at Junk.c(Junk.java:29)
        at Junk.b(Junk.java:21)
        at Junk.a(Junk.java:13)
        at Junk.main(Junk.java:4)
    Caused by: MidLevelException
        // You know Junk.d is only called by Junk.b
        at Junk.d(Junk.java:35)
        ... 3 more
    
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.