এই পৃষ্ঠাটি Crashlytics ব্যবহার করার বিষয়ে প্রায়শই জিজ্ঞাসিত প্রশ্নের সমস্যা সমাধানে সহায়তা এবং উত্তর প্রদান করে। আপনি যা খুঁজছেন তা খুঁজে না পেলে বা অতিরিক্ত সাহায্যের প্রয়োজন হলে, Firebase সহায়তার সাথে যোগাযোগ করুন।
সাধারণ সমস্যা সমাধান/FAQ
ইস্যু টেবিলে কিছু সমস্যার জন্য বিভিন্ন ফর্ম্যাট (এবং কখনও কখনও "ভেরিয়েন্ট") দেখা
Firebase কনসোলে আপনার ইস্যু টেবিলে তালিকাভুক্ত সমস্যার জন্য আপনি দুটি ভিন্ন ফর্ম্যাট লক্ষ্য করতে পারেন। এবং আপনি আপনার কিছু সমস্যার মধ্যে "ভেরিয়েন্ট" নামক একটি বৈশিষ্ট্যও লক্ষ্য করতে পারেন। এখানে কেন!
2023 সালের গোড়ার দিকে, আমরা ইভেন্টগুলিকে গ্রুপ করার জন্য একটি উন্নত বিশ্লেষণ ইঞ্জিনের পাশাপাশি একটি আপডেট করা ডিজাইন এবং নতুন সমস্যাগুলির জন্য কিছু উন্নত বৈশিষ্ট্য নিয়ে এসেছি (যেমন বৈকল্পিক!)। সমস্ত বিবরণের জন্য আমাদের সাম্প্রতিক ব্লগ পোস্টটি দেখুন, তবে আপনি হাইলাইটগুলির জন্য নীচে পড়তে পারেন।
Crashlytics আপনার অ্যাপ থেকে সমস্ত ইভেন্ট বিশ্লেষণ করে (যেমন ক্র্যাশ, নন-ফেটাল, এবং ANR) এবং ইভেন্টের গ্রুপ তৈরি করে যাকে সমস্যা বলা হয় — একটি ইস্যুতে সমস্ত ইভেন্টের ব্যর্থতার একটি সাধারণ পয়েন্ট থাকে।
এই সমস্যাগুলির মধ্যে ইভেন্টগুলিকে গোষ্ঠীভুক্ত করার জন্য, উন্নত বিশ্লেষণ ইঞ্জিন এখন ইভেন্টের অনেক দিককে দেখে, যার মধ্যে স্ট্যাক ট্রেসের ফ্রেম, ব্যতিক্রম বার্তা, ত্রুটি কোড এবং অন্যান্য প্ল্যাটফর্ম বা ত্রুটির ধরন বৈশিষ্ট্যগুলি রয়েছে৷
যাইহোক, ইভেন্টের এই গ্রুপের মধ্যে, ব্যর্থতার দিকে পরিচালিত স্ট্যাক ট্রেসগুলি ভিন্ন হতে পারে। একটি ভিন্ন স্ট্যাক ট্রেস একটি ভিন্ন মূল কারণ বোঝাতে পারে। একটি ইস্যুতে এই সম্ভাব্য পার্থক্যটি উপস্থাপন করার জন্য, আমরা এখন সমস্যার মধ্যে ভেরিয়েন্ট তৈরি করি - প্রতিটি ভেরিয়েন্ট হল একটি ইস্যুতে ইভেন্টগুলির একটি সাব-গ্রুপ যার একই ব্যর্থতা পয়েন্ট এবং একই স্ট্যাক ট্রেস রয়েছে। ভেরিয়েন্টের সাহায্যে, আপনি একটি সমস্যার মধ্যে সবচেয়ে সাধারণ স্ট্যাক ট্রেসগুলি ডিবাগ করতে পারেন এবং বিভিন্ন মূল কারণগুলি ব্যর্থতার দিকে নিয়ে যাচ্ছে কিনা তা নির্ধারণ করতে পারেন।
এই উন্নতিগুলির সাথে আপনি যা অনুভব করবেন তা এখানে:
সংশোধিত মেটাডেটা ইস্যু সারির মধ্যে প্রদর্শিত হয়
আপনার অ্যাপে সমস্যাগুলি বোঝা এবং ট্রাইজ করা এখন সহজ।কম ডুপ্লিকেট সমস্যা
একটি লাইন নম্বর পরিবর্তনের ফলে একটি নতুন সমস্যা হয় না।বিভিন্ন মূল কারণ সহ জটিল সমস্যার সহজ ডিবাগিং
একটি সমস্যার মধ্যে সবচেয়ে সাধারণ স্ট্যাক ট্রেস ডিবাগ করতে ভেরিয়েন্ট ব্যবহার করুন।আরও অর্থপূর্ণ সতর্কতা এবং সংকেত
একটি নতুন সমস্যা আসলে একটি নতুন বাগ প্রতিনিধিত্ব করে।আরো শক্তিশালী অনুসন্ধান
প্রতিটি সমস্যায় আরও অনুসন্ধানযোগ্য মেটাডেটা থাকে, যেমন ব্যতিক্রমের ধরন এবং প্যাকেজের নাম।
এই উন্নতিগুলি কীভাবে ঘটছে তা এখানে:
যখন আমরা আপনার অ্যাপ থেকে নতুন ইভেন্টগুলি পাই, তখন আমরা তা একটি বিদ্যমান সমস্যার সাথে মেলে কিনা তা পরীক্ষা করব।
যদি কোন মিল না থাকে, আমরা স্বয়ংক্রিয়ভাবে ইভেন্টে আমাদের স্মার্ট ইভেন্ট-গ্রুপিং অ্যালগরিদম প্রয়োগ করব এবং পরিমার্জিত মেটাডেটা ডিজাইনের সাথে একটি নতুন সমস্যা তৈরি করব।
এটিই প্রথম বড় আপডেট যা আমরা আমাদের ইভেন্ট গ্রুপিংয়ে তৈরি করছি। আপনার যদি প্রতিক্রিয়া থাকে বা কোনো সমস্যার সম্মুখীন হন, তাহলে অনুগ্রহ করে
ব্রেডক্রাম্ব লগ দেখা যাচ্ছে না
আপনি যদি ব্রেডক্রাম্ব লগ দেখতে না পান, তাহলে আমরা Google Analytics জন্য আপনার অ্যাপের কনফিগারেশন চেক করার পরামর্শ দিই। আপনি নিম্নলিখিত প্রয়োজনীয়তা পূরণ নিশ্চিত করুন:
আপনি আপনার Firebase প্রকল্পে Google Analytics সক্ষম করেছেন ।
আপনি Google Analytics জন্য ডেটা শেয়ারিং সক্ষম করেছেন। আপনার Analytics ডেটা শেয়ারিং সেটিংস পরিচালনা করুন- এ এই সেটিং সম্পর্কে আরও জানুন
আপনি করেছেনGoogle Analytics এর জন্য Firebase SDK যোগ করা হয়েছেআপনার অ্যাপে। এই SDK অবশ্যই Crashlytics SDK ছাড়াও যোগ করতে হবে।
আপনি ব্যবহার করছেনসর্বশেষ Firebase SDK সংস্করণআপনি আপনার অ্যাপে যে সমস্ত পণ্য ব্যবহার করেন তার জন্য।
বেগ সতর্কতা দেখছেন না
আপনি যদি বেগের সতর্কতা দেখতে না পান তবে নিশ্চিত করুন যে আপনি ব্যবহার করছেনCrashlytics SDK 11.7.0+।
ক্র্যাশ-মুক্ত মেট্রিক্স দেখা যাচ্ছে না (বা অবিশ্বস্ত মেট্রিক্স দেখা)
আপনি যদি ক্র্যাশ-মুক্ত মেট্রিক্স (যেমন ক্র্যাশ-মুক্ত ব্যবহারকারী এবং সেশন) দেখতে না পান বা অবিশ্বস্ত মেট্রিক না দেখেন তবে নিম্নলিখিতগুলি পরীক্ষা করুন:
আপনি ব্যবহার করছেন তা নিশ্চিত করুনCrashlytics SDK 11.7.0+।
নিশ্চিত করুন যে আপনার ডেটা সংগ্রহের সেটিংস আপনার ক্র্যাশ-মুক্ত মেট্রিক্সের গুণমানকে প্রভাবিত করছে না:
আপনি যদি স্বয়ংক্রিয় ক্র্যাশ রিপোর্টিং অক্ষম করে অপ্ট-ইন রিপোর্টিং সক্ষম করেন , তবে ক্র্যাশ তথ্য শুধুমাত্র সেই ব্যবহারকারীদের কাছ থেকে Crashlytics এ পাঠানো যেতে পারে যারা স্পষ্টভাবে ডেটা সংগ্রহে নির্বাচন করেছেন। এইভাবে, ক্র্যাশ-মুক্ত মেট্রিক্সের নির্ভুলতা প্রভাবিত হবে কারণ Crashlytics শুধুমাত্র এই অপ্ট-ইন ব্যবহারকারীদের (আপনার সমস্ত ব্যবহারকারীর পরিবর্তে) থেকে ক্র্যাশ তথ্য রয়েছে। এর মানে হল যে আপনার ক্র্যাশ-মুক্ত মেট্রিকগুলি কম নির্ভরযোগ্য এবং আপনার অ্যাপের সামগ্রিক স্থিতিশীলতার কম প্রতিফলিত হতে পারে।
আপনার যদি স্বয়ংক্রিয় ডেটা সংগ্রহ অক্ষম থাকে, তাহলে আপনি Crashlytics এ ডিভাইসে ক্যাশে করা রিপোর্ট পাঠাতে
sendUnsentReports
ব্যবহার করতে পারেন। এই পদ্ধতিটি ব্যবহার করলে Crashlytics ক্র্যাশ ডেটা পাঠানো হবে, কিন্তু সেশন ডেটা নয় যার কারণে কনসোল চার্টগুলি ক্র্যাশ-মুক্ত মেট্রিক্সের জন্য কম বা শূন্য মান দেখায়৷
ক্র্যাশ-মুক্ত ব্যবহারকারীদের কীভাবে গণনা করা হয়?
Crashlytics ড্যাশবোর্ডে অ্যান্ড্রয়েড অ্যাপের জন্য অপ্রতিরোধ্য স্ট্যাক ট্রেস দেখা
আপনি যদি ইউনিটি IL2CPP ব্যবহার করেন এবং আপনি অপ্রত্যয়িত স্ট্যাক ট্রেস দেখতে পান, তাহলে নিম্নলিখিতগুলি চেষ্টা করুন:
আপনি Crashlytics Unity SDK-এর v8.6.1 বা উচ্চতর ব্যবহার করছেন কিনা তা নিশ্চিত করুন।
আপনার প্রতীক ফাইল তৈরি এবং আপলোড করার জন্য আপনি Firebase CLI
crashlytics:symbols:upload
কমান্ডের জন্য সেট আপ করেছেন এবং চালাচ্ছেন তা নিশ্চিত করুন।আপনি যখনই একটি রিলিজ বিল্ড তৈরি করবেন বা Firebase কনসোলে প্রতীকী স্ট্যাকের ট্রেস দেখতে চান এমন কোনো বিল্ড তৈরি করার সময় আপনাকে এই CLI কমান্ডটি চালাতে হবে। পঠনযোগ্য ক্র্যাশ রিপোর্ট পৃষ্ঠায় আরও জানুন।
IL2CPP ব্যবহার করে এমন অ্যাপগুলির সাথে Crashlytics ব্যবহার করা যেতে পারে?
হ্যাঁ, Crashlytics IL2CPP ব্যবহার করে এমন আপনার অ্যাপের জন্য প্রতীকী স্ট্যাক ট্রেস প্রদর্শন করতে পারে। এই ক্ষমতা Android বা Apple প্ল্যাটফর্মে প্রকাশিত অ্যাপগুলির জন্য উপলব্ধ৷ আপনাকে যা করতে হবে তা এখানে:
আপনি Crashlytics Unity SDK-এর v8.6.0 বা উচ্চতর ব্যবহার করছেন কিনা তা নিশ্চিত করুন।
আপনার প্ল্যাটফর্মের জন্য প্রয়োজনীয় কাজগুলি সম্পূর্ণ করুন:
অ্যাপল প্ল্যাটফর্ম অ্যাপের জন্য : কোন বিশেষ কর্মের প্রয়োজন নেই। Apple প্ল্যাটফর্ম অ্যাপের জন্য, Firebase Unity Editor প্লাগইন স্বয়ংক্রিয়ভাবে আপনার Xcode প্রজেক্টকে চিহ্ন আপলোড করতে কনফিগার করে।
অ্যান্ড্রয়েড অ্যাপ্লিকেশানগুলির জন্য : নিশ্চিত করুন যে আপনি আপনার প্রতীক ফাইল তৈরি এবং আপলোড করতে Firebase CLI
crashlytics:symbols:upload
কমান্ডের জন্য সেট আপ করেছেন এবং চালাচ্ছেন।আপনি যখনই একটি রিলিজ বিল্ড তৈরি করবেন বা Firebase কনসোলে প্রতীকী স্ট্যাকের ট্রেস দেখতে চান এমন কোনো বিল্ড তৈরি করার সময় আপনাকে এই CLI কমান্ডটি চালাতে হবে। পঠনযোগ্য ক্র্যাশ রিপোর্ট পৃষ্ঠায় আরও জানুন।
কে একটি ইস্যুতে নোট দেখতে, লিখতে এবং মুছতে পারে?
নোটগুলি প্রকল্পের সদস্যদের প্রশ্ন, স্ট্যাটাস আপডেট ইত্যাদির সাথে নির্দিষ্ট বিষয়ে মন্তব্য করার অনুমতি দেয়।
যখন কোনও প্রকল্প সদস্য একটি নোট পোস্ট করে, তখন এটি তাদের Google অ্যাকাউন্টের ইমেলের সাথে লেবেল করা হয়। এই ইমেল ঠিকানাটি নোটের সাথে, নোটটি দেখার অ্যাক্সেস সহ সমস্ত প্রকল্প সদস্যদের কাছে দৃশ্যমান।
নিম্নলিখিতগুলি নোটগুলি দেখতে, লিখতে এবং মুছতে প্রয়োজনীয় অ্যাক্সেস বর্ণনা করে:
নিম্নলিখিত যেকোনও ভূমিকা সহ প্রকল্প সদস্যরা বিদ্যমান নোটগুলি দেখতে এবং মুছে ফেলতে পারেন এবং একটি সমস্যায় নতুন নোট লিখতে পারেন।
- প্রকল্পের মালিক বা সম্পাদক , ফায়ারবেস অ্যাডমিন , কোয়ালিটি অ্যাডমিন বা ক্র্যাশলাইটিক্স অ্যাডমিন
নিম্নলিখিত ভূমিকাগুলির মধ্যে যেকোনও প্রকল্পের সদস্যরা একটি ইস্যুতে পোস্ট করা নোটগুলি দেখতে পারেন, কিন্তু তারা একটি নোট মুছতে বা লিখতে পারবেন না।
- প্রজেক্ট ভিউয়ার , ফায়ারবেস ভিউয়ার , কোয়ালিটি ভিউয়ার বা ক্র্যাশলাইটিক্স ভিউয়ার
ইন্টিগ্রেশন
অ্যাপটি Google Mobile Ads SDKও ব্যবহার করে কিন্তু ক্র্যাশ পাচ্ছে না
আপনার প্রোজেক্ট যদি Google Mobile Ads SDK-এর পাশাপাশি Crashlytics ব্যবহার করে, তাহলে ব্যতিক্রম হ্যান্ডলারদের নিবন্ধন করার সময় ক্র্যাশ রিপোর্টাররা হস্তক্ষেপ করছে। সমস্যা সমাধানের জন্য, disableSDKCrashReporting
কল করে Mobile Ads SDK-এ ক্র্যাশ রিপোর্টিং বন্ধ করুন।
আমার BigQuery ডেটাসেট কোথায় অবস্থিত?
আপনি BigQuery-এর সাথে Crashlytics লিঙ্ক করার পরে, আপনার তৈরি করা নতুন ডেটাসেটগুলি স্বয়ংক্রিয়ভাবে মার্কিন যুক্তরাষ্ট্রে অবস্থিত হবে, আপনার Firebase প্রকল্পের অবস্থান নির্বিশেষে।
প্রত্যাবর্তিত সমস্যা
একটি regressed সমস্যা কি?
আপনি পূর্বে সমস্যাটি বন্ধ করার সময় একটি সমস্যাটি রিগ্রেশন হয়েছে কিন্তু Crashlytics একটি নতুন প্রতিবেদন পায় যে সমস্যাটি আবার ঘটেছে। Crashlytics স্বয়ংক্রিয়ভাবে এই প্রত্যাবর্তিত সমস্যাগুলি পুনরায় খোলে যাতে আপনি সেগুলিকে আপনার অ্যাপের জন্য উপযুক্ত হিসাবে সমাধান করতে পারেন।
এখানে একটি উদাহরণের দৃশ্য যা ব্যাখ্যা করে যে কীভাবে Crashlytics একটি সমস্যাকে রিগ্রেশন হিসাবে শ্রেণীবদ্ধ করে:
- প্রথমবারের মতো, Crashlytics ক্র্যাশ "A" সম্পর্কে একটি ক্র্যাশ রিপোর্ট পায়৷ Crashlytics সেই ক্র্যাশের জন্য একটি সংশ্লিষ্ট সমস্যা খোলে (ইস্যু "A")।
- আপনি এই বাগটি দ্রুত ঠিক করুন, সমস্যা "A" বন্ধ করুন এবং তারপর আপনার অ্যাপের একটি নতুন সংস্করণ প্রকাশ করুন৷
- আপনি সমস্যাটি বন্ধ করার পরে Crashlytics ইস্যু "A" সম্পর্কে আরেকটি প্রতিবেদন পায়।
- প্রতিবেদনটি যদি এমন কোনো অ্যাপ সংস্করণ থেকে হয় যা Crashlytics জানত যে আপনি যখন সমস্যাটি বন্ধ করেছিলেন (অর্থাৎ সংস্করণটি কোনও ক্র্যাশের জন্য একটি ক্র্যাশ রিপোর্ট পাঠিয়েছিল), তাহলে Crashlytics সমস্যাটিকে প্রত্যাবর্তন হিসাবে বিবেচনা করবে না। বিষয়টি বন্ধ থাকবে।
- প্রতিবেদনটি যদি এমন কোনো অ্যাপ সংস্করণ থেকে হয় যা Crashlytics জানত না যে আপনি কখন সমস্যাটি বন্ধ করেছিলেন (অর্থাৎ সংস্করণটি কোনও ক্র্যাশের জন্য কোনও ক্র্যাশ রিপোর্ট পাঠায়নি ), তাহলে Crashlytics সমস্যাটিকে প্রত্যাবর্তন বলে বিবেচনা করে এবং সমস্যাটি আবার খুলবে।
যখন একটি সমস্যা রিগ্রেস হয়, তখন আমরা একটি রিগ্রেশন শনাক্তকরণ সতর্কতা পাঠাই এবং সমস্যাটিতে একটি রিগ্রেশন সিগন্যাল যোগ করি যাতে আপনাকে জানানো হয় যে Crashlytics সমস্যাটি আবার খুলেছে। আপনি যদি আমাদের রিগ্রেশন অ্যালগরিদমের কারণে কোনো সমস্যা পুনরায় খুলতে না চান, তাহলে সমস্যাটিকে বন্ধ করার পরিবর্তে "নিঃশব্দ" করুন।
কেন আমি পুরানো অ্যাপ সংস্করণগুলির জন্য প্রত্যাবর্তিত সমস্যাগুলি দেখছি?
যদি কোনও রিপোর্ট কোনও পুরানো অ্যাপ সংস্করণ থেকে হয় যেটি আপনি সমস্যাটি বন্ধ করার সময় কোনও ক্র্যাশ রিপোর্ট পাঠাননি, তাহলে Crashlytics সমস্যাটিকে প্রত্যাবর্তন বলে বিবেচনা করে এবং সমস্যাটি আবার খুলবে।
এই পরিস্থিতি নিম্নলিখিত পরিস্থিতিতে ঘটতে পারে: আপনি একটি বাগ সংশোধন করেছেন এবং আপনার অ্যাপের একটি নতুন সংস্করণ প্রকাশ করেছেন, কিন্তু আপনার কাছে এখনও বাগ সংশোধন ছাড়াই পুরানো সংস্করণে ব্যবহারকারীরা আছে৷ যদি, ঘটনাক্রমে, আপনি সমস্যাটি বন্ধ করার সময় সেই পুরানো সংস্করণগুলির মধ্যে একটি কখনই কোনও ক্র্যাশ রিপোর্ট না পাঠায়, এবং সেই ব্যবহারকারীরা বাগটির সম্মুখীন হতে শুরু করে, তাহলে সেই ক্র্যাশ রিপোর্টগুলি একটি প্রত্যাবর্তিত সমস্যাকে ট্রিগার করবে৷
আপনি যদি আমাদের রিগ্রেশন অ্যালগরিদমের কারণে কোনো সমস্যা পুনরায় খুলতে না চান, তাহলে সমস্যাটিকে বন্ধ করার পরিবর্তে "নিঃশব্দ" করুন।
ধরা পড়া ব্যতিক্রমগুলিকে মারাত্মক হিসাবে রিপোর্ট করা
Crashlytics ধরা না পড়া ব্যতিক্রমগুলিকে মারাত্মক হিসাবে রিপোর্ট করতে পারে (Unity SDK-এর v10.4.0 দিয়ে শুরু)। নিম্নলিখিত প্রায়শই জিজ্ঞাসিত প্রশ্নগুলি এই বৈশিষ্ট্যটি ব্যবহার করার যুক্তি এবং সর্বোত্তম অনুশীলনগুলি ব্যাখ্যা করতে সহায়তা করে৷
কেন একটি অ্যাপে ধরা পড়া ব্যতিক্রমগুলিকে মারাত্মক হিসাবে রিপোর্ট করা উচিত?
ধরা না পড়া ব্যতিক্রমগুলিকে মারাত্মক হিসাবে রিপোর্ট করার মাধ্যমে, আপনি আরও বাস্তবসম্মত ইঙ্গিত পাবেন যে কোন ব্যতিক্রমগুলির ফলে গেমটি খেলার অযোগ্য হতে পারে – এমনকি যদি অ্যাপটি চলতে থাকে।
মনে রাখবেন যে আপনি যদি মারাত্মক রিপোর্ট করা শুরু করেন, তাহলে আপনার ক্র্যাশ-ফ্রি ব্যবহারকারীদের (CFU) শতাংশ কমে যাবে, কিন্তু CFU মেট্রিক আপনার অ্যাপের সাথে শেষ-ব্যবহারকারীদের অভিজ্ঞতার আরও প্রতিনিধিত্ব করবে।
কোন ব্যতিক্রমগুলি মারাত্মক হিসাবে রিপোর্ট করা হবে?
Crashlytics জন্য একটি অজানা ব্যতিক্রমকে মারাত্মক হিসাবে রিপোর্ট করার জন্য, নিম্নলিখিত দুটি শর্ত অবশ্যই পূরণ করতে হবে:
আপনার অ্যাপে আরম্ভ করার সময়,
ReportUncaughtExceptionsAsFatal
প্রপার্টিটি অবশ্যইtrue
সেট করতে হবে ।আপনার অ্যাপ (বা একটি অন্তর্ভুক্ত লাইব্রেরি) এমন একটি ব্যতিক্রম ছুঁড়েছে যা ধরা পড়েনি। একটি ব্যতিক্রম যা তৈরি করা হয়েছে, কিন্তু নিক্ষিপ্ত নয় , ধরা পড়ে না।
মারাত্মক হিসাবে ধরা না পড়া ব্যতিক্রমগুলির রিপোর্টিং সক্ষম করার পরে, আমার কাছে এখন অনেক নতুন মারাত্মক রয়েছে। আমি কিভাবে সঠিকভাবে এই ব্যতিক্রমগুলি পরিচালনা করব?
যখন আপনি মারাত্মক হিসাবে আপনার ধরা না পড়া ব্যতিক্রমগুলির রিপোর্ট পেতে শুরু করেন, তখন এই ধরা না পড়া ব্যতিক্রমগুলি পরিচালনা করার জন্য এখানে কিছু বিকল্প রয়েছে:
- আপনি কিভাবে এই ধরা পড়া ব্যতিক্রমগুলি ধরা এবং পরিচালনা শুরু করতে পারেন তা বিবেচনা করুন।
- ইউনিটি ডিবাগ কনসোল এবং Crashlytics -এ ব্যতিক্রম লগিং করার জন্য বিভিন্ন বিকল্প বিবেচনা করুন।
ছোঁড়া ব্যতিক্রমগুলি ধরুন এবং পরিচালনা করুন
ব্যতিক্রমগুলি অপ্রত্যাশিত বা ব্যতিক্রমী অবস্থা প্রতিফলিত করার জন্য তৈরি এবং নিক্ষেপ করা হয়। একটি নিক্ষিপ্ত ব্যতিক্রম দ্বারা প্রতিফলিত সমস্যাগুলি সমাধান করার জন্য প্রোগ্রামটিকে একটি পরিচিত অবস্থায় ফিরিয়ে দেওয়া অন্তর্ভুক্ত (একটি প্রক্রিয়া যা ব্যতিক্রম হ্যান্ডলিং হিসাবে পরিচিত)।
সমস্ত পূর্বে দেখা ব্যতিক্রমগুলি ধরা এবং পরিচালনা করা সর্বোত্তম অনুশীলন যদি না প্রোগ্রামটিকে একটি পরিচিত অবস্থায় ফিরিয়ে দেওয়া যায় না।
কোন ধরণের ব্যতিক্রমগুলি ধরা হয় এবং কোন কোড দ্বারা পরিচালিত হয় তা নিয়ন্ত্রণ করতে, try-catch
ব্লকে একটি ব্যতিক্রম তৈরি করতে পারে এমন র্যাপ কোড । নিশ্চিত করুন যে catch
স্টেটমেন্টের শর্তগুলি যথাযথভাবে নির্দিষ্ট ব্যতিক্রমগুলি পরিচালনা করার জন্য যতটা সম্ভব সংকীর্ণ।
Unity বা Crashlytics এ ব্যতিক্রম লগ করুন
সমস্যাটি ডিবাগ করতে সহায়তা করার জন্য ইউনিটি বা Crashlytics ব্যতিক্রমগুলি রেকর্ড করার একাধিক উপায় রয়েছে।
Crashlytics ব্যবহার করার সময়, এখানে দুটি সবচেয়ে সাধারণ এবং প্রস্তাবিত বিকল্প রয়েছে:
বিকল্প 1: ইউনিটি কনসোলে প্রিন্ট করুন, কিন্তু বিকাশ বা সমস্যা সমাধানের সময় Crashlytics রিপোর্ট করবেন না
-
Debug.Log(exception)
,Debug.LogWarning(exception)
, এবংDebug.LogError(exception)
ব্যবহার করে ইউনিটি কনসোলে প্রিন্ট করুন যা ইউনিটি কনসোলে ব্যতিক্রমের বিষয়বস্তু মুদ্রণ করে এবং ব্যতিক্রমটিকে পুনরায় নিক্ষেপ করে না।
-
বিকল্প 2: নিম্নলিখিত পরিস্থিতিতে Crashlytics ড্যাশবোর্ডে একত্রিত প্রতিবেদনের জন্য Crashlytics এ আপলোড করুন:
- একটি সম্ভাব্য পরবর্তী Crashlytics ইভেন্ট ডিবাগ করার জন্য যদি একটি ব্যতিক্রম লগিং করার উপযুক্ত হয়, তাহলে
Crashlytics.Log(exception.ToString())
ব্যবহার করুন। - ধরা এবং পরিচালনা করা সত্ত্বেও যদি একটি ব্যতিক্রম Crashlytics এ রিপোর্ট করা হয়, তাহলে এটিকে একটি অপ্রত্যাশিত ঘটনা হিসাবে লগ করতে
Crashlytics.LogException(exception)
ব্যবহার করুন।
- একটি সম্ভাব্য পরবর্তী Crashlytics ইভেন্ট ডিবাগ করার জন্য যদি একটি ব্যতিক্রম লগিং করার উপযুক্ত হয়, তাহলে
যাইহোক, যদি আপনি ইউনিটি ক্লাউড ডায়াগনস্টিকসে একটি মারাত্মক ইভেন্ট ম্যানুয়ালি রিপোর্ট করতে চান, আপনি Debug.LogException
ব্যবহার করতে পারেন। এই বিকল্পটি অপশন 1 এর মত ইউনিটি কনসোলে ব্যতিক্রমটি প্রিন্ট করে, তবে এটি ব্যতিক্রমটিও ছুঁড়ে দেয় (এটি এখনও নিক্ষেপ করা বা ধরা হয়েছে কিনা)। এটি স্থানীয়ভাবে ত্রুটি ছুড়ে দেয়। এর মানে হল যে এমনকি একটি আশেপাশের Debug.LogException(exception)
try-catch
ব্লকের সাথে এখনও একটি ধরা পড়া ব্যতিক্রম নয়।
অতএব, যদি এবং শুধুমাত্র যদি আপনি নিম্নলিখিত সব করতে চান তাহলে Debug.LogException
কল করুন:
- ইউনিটি কনসোলে ব্যতিক্রম প্রিন্ট করতে।
- একটি মারাত্মক ঘটনা হিসাবে Crashlytics এ ব্যতিক্রম আপলোড করতে।
- ব্যতিক্রমটি ছুঁড়ে ফেলার জন্য, এটিকে একটি অঘোষিত ব্যতিক্রম হিসাবে বিবেচনা করতে হবে এবং এটি ইউনিটি ক্লাউড ডায়াগনস্টিকসে রিপোর্ট করতে হবে।
মনে রাখবেন যে আপনি যদি ইউনিটি কনসোলে একটি ধরা ব্যতিক্রম প্রিন্ট করতে চান এবং একটি অপ্রত্যাশিত ইভেন্ট হিসাবে Crashlytics এ আপলোড করতে চান তবে পরিবর্তে নিম্নলিখিতগুলি করুন:
try
{
methodThatThrowsMyCustomExceptionType();
}
catch(MyCustomExceptionType exception)
{
// Print the exception to the Unity console at the error level.
Debug.LogError(exception);
// Upload the exception to Crashlytics as a non-fatal event.
Crashlytics.LogException(exception); // not Debug.LogException
//
// Code that handles the exception
//
}
এই পৃষ্ঠাটি Crashlytics ব্যবহার করার বিষয়ে প্রায়শই জিজ্ঞাসিত প্রশ্নের সমস্যা সমাধানে সহায়তা এবং উত্তর প্রদান করে। আপনি যা খুঁজছেন তা খুঁজে না পেলে বা অতিরিক্ত সাহায্যের প্রয়োজন হলে, Firebase সহায়তার সাথে যোগাযোগ করুন।
সাধারণ সমস্যা সমাধান/FAQ
ইস্যু টেবিলে কিছু সমস্যার জন্য বিভিন্ন ফর্ম্যাট (এবং কখনও কখনও "ভেরিয়েন্ট") দেখা
Firebase কনসোলে আপনার ইস্যু টেবিলে তালিকাভুক্ত সমস্যার জন্য আপনি দুটি ভিন্ন ফর্ম্যাট লক্ষ্য করতে পারেন। এবং আপনি আপনার কিছু সমস্যার মধ্যে "ভেরিয়েন্ট" নামক একটি বৈশিষ্ট্যও লক্ষ্য করতে পারেন। এখানে কেন!
2023 সালের গোড়ার দিকে, আমরা ইভেন্টগুলিকে গ্রুপ করার জন্য একটি উন্নত বিশ্লেষণ ইঞ্জিনের পাশাপাশি একটি আপডেট করা ডিজাইন এবং নতুন সমস্যাগুলির জন্য কিছু উন্নত বৈশিষ্ট্য নিয়ে এসেছি (যেমন বৈকল্পিক!)। সমস্ত বিবরণের জন্য আমাদের সাম্প্রতিক ব্লগ পোস্টটি দেখুন, তবে আপনি হাইলাইটগুলির জন্য নীচে পড়তে পারেন।
Crashlytics আপনার অ্যাপ থেকে সমস্ত ইভেন্ট বিশ্লেষণ করে (যেমন ক্র্যাশ, নন-ফেটাল, এবং ANR) এবং ইভেন্টের গ্রুপ তৈরি করে যাকে সমস্যা বলা হয় — একটি ইস্যুতে সমস্ত ইভেন্টের ব্যর্থতার একটি সাধারণ পয়েন্ট থাকে।
এই সমস্যাগুলির মধ্যে ইভেন্টগুলিকে গোষ্ঠীভুক্ত করার জন্য, উন্নত বিশ্লেষণ ইঞ্জিন এখন ইভেন্টের অনেক দিককে দেখে, যার মধ্যে স্ট্যাক ট্রেসের ফ্রেম, ব্যতিক্রম বার্তা, ত্রুটি কোড এবং অন্যান্য প্ল্যাটফর্ম বা ত্রুটির ধরন বৈশিষ্ট্যগুলি রয়েছে৷
যাইহোক, ইভেন্টের এই গ্রুপের মধ্যে, ব্যর্থতার দিকে পরিচালিত স্ট্যাক ট্রেসগুলি ভিন্ন হতে পারে। একটি ভিন্ন স্ট্যাক ট্রেস একটি ভিন্ন মূল কারণ বোঝাতে পারে। একটি ইস্যুতে এই সম্ভাব্য পার্থক্যটি উপস্থাপন করার জন্য, আমরা এখন সমস্যার মধ্যে ভেরিয়েন্ট তৈরি করি - প্রতিটি ভেরিয়েন্ট হল একটি ইস্যুতে ইভেন্টগুলির একটি সাব-গ্রুপ যার একই ব্যর্থতা পয়েন্ট এবং একই স্ট্যাক ট্রেস রয়েছে। ভেরিয়েন্টের সাহায্যে, আপনি একটি সমস্যার মধ্যে সবচেয়ে সাধারণ স্ট্যাক ট্রেসগুলি ডিবাগ করতে পারেন এবং বিভিন্ন মূল কারণগুলি ব্যর্থতার দিকে নিয়ে যাচ্ছে কিনা তা নির্ধারণ করতে পারেন।
এই উন্নতিগুলির সাথে আপনি যা অনুভব করবেন তা এখানে:
সংশোধিত মেটাডেটা ইস্যু সারির মধ্যে প্রদর্শিত হয়
আপনার অ্যাপে সমস্যাগুলি বোঝা এবং ট্রাইজ করা এখন সহজ।কম ডুপ্লিকেট সমস্যা
একটি লাইন নম্বর পরিবর্তনের ফলে একটি নতুন সমস্যা হয় না।বিভিন্ন মূল কারণ সহ জটিল সমস্যার সহজ ডিবাগিং
একটি সমস্যার মধ্যে সবচেয়ে সাধারণ স্ট্যাক ট্রেস ডিবাগ করতে ভেরিয়েন্ট ব্যবহার করুন।আরও অর্থপূর্ণ সতর্কতা এবং সংকেত
একটি নতুন সমস্যা আসলে একটি নতুন বাগ প্রতিনিধিত্ব করে।আরো শক্তিশালী অনুসন্ধান
প্রতিটি সমস্যায় আরও অনুসন্ধানযোগ্য মেটাডেটা থাকে, যেমন ব্যতিক্রমের ধরন এবং প্যাকেজের নাম।
এই উন্নতিগুলি কীভাবে ঘটছে তা এখানে:
যখন আমরা আপনার অ্যাপ থেকে নতুন ইভেন্টগুলি পাই, তখন আমরা তা একটি বিদ্যমান সমস্যার সাথে মেলে কিনা তা পরীক্ষা করব।
যদি কোন মিল না থাকে, আমরা স্বয়ংক্রিয়ভাবে ইভেন্টে আমাদের স্মার্ট ইভেন্ট-গ্রুপিং অ্যালগরিদম প্রয়োগ করব এবং পরিমার্জিত মেটাডেটা ডিজাইনের সাথে একটি নতুন সমস্যা তৈরি করব।
এটিই প্রথম বড় আপডেট যা আমরা আমাদের ইভেন্ট গ্রুপিংয়ে তৈরি করছি। আপনার যদি প্রতিক্রিয়া থাকে বা কোনো সমস্যার সম্মুখীন হন, তাহলে অনুগ্রহ করে
ব্রেডক্রাম্ব লগ দেখা যাচ্ছে না
আপনি যদি ব্রেডক্রাম্ব লগ দেখতে না পান, তাহলে আমরা Google Analytics জন্য আপনার অ্যাপের কনফিগারেশন চেক করার পরামর্শ দিই। আপনি নিম্নলিখিত প্রয়োজনীয়তা পূরণ নিশ্চিত করুন:
আপনি আপনার Firebase প্রকল্পে Google Analytics সক্ষম করেছেন ।
আপনি Google Analytics জন্য ডেটা শেয়ারিং সক্ষম করেছেন। আপনার Analytics ডেটা শেয়ারিং সেটিংস পরিচালনা করুন- এ এই সেটিং সম্পর্কে আরও জানুন
আপনি করেছেনGoogle Analytics এর জন্য Firebase SDK যোগ করা হয়েছেআপনার অ্যাপে। এই SDK অবশ্যই Crashlytics SDK ছাড়াও যোগ করতে হবে।
আপনি ব্যবহার করছেনসর্বশেষ Firebase SDK সংস্করণআপনি আপনার অ্যাপে যে সমস্ত পণ্য ব্যবহার করেন তার জন্য।
বেগ সতর্কতা দেখছেন না
আপনি যদি বেগের সতর্কতা দেখতে না পান তবে নিশ্চিত করুন যে আপনি ব্যবহার করছেনCrashlytics SDK 11.7.0+।
ক্র্যাশ-মুক্ত মেট্রিক্স দেখা যাচ্ছে না (বা অবিশ্বস্ত মেট্রিক্স দেখা)
আপনি যদি ক্র্যাশ-মুক্ত মেট্রিক্স (যেমন ক্র্যাশ-মুক্ত ব্যবহারকারী এবং সেশন) দেখতে না পান বা অবিশ্বস্ত মেট্রিক না দেখেন তবে নিম্নলিখিতগুলি পরীক্ষা করুন:
আপনি ব্যবহার করছেন তা নিশ্চিত করুনCrashlytics SDK 11.7.0+।
নিশ্চিত করুন যে আপনার ডেটা সংগ্রহের সেটিংস আপনার ক্র্যাশ-মুক্ত মেট্রিক্সের গুণমানকে প্রভাবিত করছে না:
আপনি যদি স্বয়ংক্রিয় ক্র্যাশ রিপোর্টিং অক্ষম করে অপ্ট-ইন রিপোর্টিং সক্ষম করেন , তবে ক্র্যাশ তথ্য শুধুমাত্র সেই ব্যবহারকারীদের কাছ থেকে Crashlytics এ পাঠানো যেতে পারে যারা স্পষ্টভাবে ডেটা সংগ্রহে নির্বাচন করেছেন। এইভাবে, ক্র্যাশ-মুক্ত মেট্রিক্সের নির্ভুলতা প্রভাবিত হবে কারণ Crashlytics শুধুমাত্র এই অপ্ট-ইন ব্যবহারকারীদের (আপনার সমস্ত ব্যবহারকারীর পরিবর্তে) থেকে ক্র্যাশ তথ্য রয়েছে। এর মানে হল যে আপনার ক্র্যাশ-মুক্ত মেট্রিকগুলি কম নির্ভরযোগ্য এবং আপনার অ্যাপের সামগ্রিক স্থিতিশীলতার কম প্রতিফলিত হতে পারে।
আপনার যদি স্বয়ংক্রিয় ডেটা সংগ্রহ অক্ষম থাকে, তাহলে আপনি Crashlytics এ ডিভাইসে ক্যাশে করা রিপোর্ট পাঠাতে
sendUnsentReports
ব্যবহার করতে পারেন। এই পদ্ধতিটি ব্যবহার করলে Crashlytics ক্র্যাশ ডেটা পাঠানো হবে, কিন্তু সেশন ডেটা নয় যার কারণে কনসোল চার্টগুলি ক্র্যাশ-মুক্ত মেট্রিক্সের জন্য কম বা শূন্য মান দেখায়৷
ক্র্যাশ-মুক্ত ব্যবহারকারীদের কীভাবে গণনা করা হয়?
Crashlytics ড্যাশবোর্ডে অ্যান্ড্রয়েড অ্যাপ্লিকেশনগুলির জন্য অনিচ্ছাকৃত স্ট্যাক ট্রেসগুলি দেখে
আপনি যদি ইউনিটি আইএল 2 সিপিপিপি ব্যবহার করছেন এবং আপনি সংবেদনশীল স্ট্যাক ট্রেসগুলি দেখছেন, তবে নিম্নলিখিতটি ব্যবহার করে দেখুন:
নিশ্চিত হয়ে নিন যে আপনি v8.6.1 বা Crashlytics ইউনিটি এসডিকে -র উচ্চতর ব্যবহার করছেন।
নিশ্চিত হয়ে নিন যে আপনি Firebase সিএলআই
crashlytics:symbols:upload
কমান্ড।আপনি প্রতিবার এই সিএলআই কমান্ডটি চালাতে হবে যে আপনি কোনও রিলিজ বিল্ড বা এমন কোনও বিল্ড তৈরি করেন যার জন্য আপনি Firebase কনসোলে প্রতীকী স্ট্যাক ট্রেস দেখতে চান। পঠনযোগ্য ক্র্যাশ রিপোর্টস পৃষ্ঠায় আরও জানুন।
আইএল 2 সিপিপি ব্যবহার করে এমন অ্যাপ্লিকেশনগুলির সাথে Crashlytics ব্যবহার করা যেতে পারে?
হ্যাঁ, Crashlytics আপনার অ্যাপ্লিকেশনগুলির জন্য প্রতীকী স্ট্যাক ট্রেসগুলি প্রদর্শন করতে পারে যা আইএল 2 সিপিপি ব্যবহার করে। এই ক্ষমতাটি অ্যান্ড্রয়েড বা অ্যাপল প্ল্যাটফর্মগুলিতে প্রকাশিত অ্যাপ্লিকেশনগুলির জন্য উপলব্ধ। আপনাকে যা করতে হবে তা এখানে:
নিশ্চিত হয়ে নিন যে আপনি v8.6.0 বা Crashlytics ইউনিটি এসডিকে -র উচ্চতর ব্যবহার করছেন।
আপনার প্ল্যাটফর্মের জন্য প্রয়োজনীয় কাজগুলি সম্পূর্ণ করুন:
অ্যাপল প্ল্যাটফর্ম অ্যাপ্লিকেশনগুলির জন্য : কোনও বিশেষ ক্রিয়াকলাপের প্রয়োজন নেই। অ্যাপল প্ল্যাটফর্ম অ্যাপ্লিকেশনগুলির জন্য, ফায়ারবেস ইউনিটি সম্পাদক প্লাগইন স্বয়ংক্রিয়ভাবে আপনার এক্সকোড প্রকল্পটি প্রতীকগুলি আপলোড করতে কনফিগার করে।
অ্যান্ড্রয়েড অ্যাপ্লিকেশনগুলির জন্য : নিশ্চিত হয়ে নিন যে আপনি Firebase সিএলআই
crashlytics:symbols:upload
কমান্ড।আপনি প্রতিবার এই সিএলআই কমান্ডটি চালাতে হবে যে আপনি কোনও রিলিজ বিল্ড বা এমন কোনও বিল্ড তৈরি করেন যার জন্য আপনি Firebase কনসোলে প্রতীকী স্ট্যাক ট্রেস দেখতে চান। পঠনযোগ্য ক্র্যাশ রিপোর্টস পৃষ্ঠায় আরও জানুন।
কে কোনও ইস্যুতে নোটগুলি দেখতে, লিখতে এবং মুছতে পারে?
নোটগুলি প্রকল্পের সদস্যদের প্রশ্ন, স্ট্যাটাস আপডেট ইত্যাদির সাথে নির্দিষ্ট বিষয়ে মন্তব্য করার অনুমতি দেয়।
যখন কোনও প্রকল্পের সদস্য একটি নোট পোস্ট করেন, এটি তাদের গুগল অ্যাকাউন্টের ইমেল সহ লেবেলযুক্ত। এই ইমেল ঠিকানাটি নোটের পাশাপাশি নোটটি দেখার জন্য অ্যাক্সেস সহ সমস্ত প্রকল্পের সদস্যদের কাছে দৃশ্যমান।
নিম্নলিখিত নোটগুলি দেখতে, লিখতে এবং মুছতে প্রয়োজনীয় অ্যাক্সেসের বর্ণনা দেয়:
নিম্নলিখিত যেকোনও ভূমিকা সহ প্রকল্প সদস্যরা বিদ্যমান নোটগুলি দেখতে এবং মুছে ফেলতে পারেন এবং একটি সমস্যায় নতুন নোট লিখতে পারেন।
- প্রকল্পের মালিক বা সম্পাদক , ফায়ারবেস অ্যাডমিন , কোয়ালিটি অ্যাডমিন বা ক্র্যাশলাইটিক্স অ্যাডমিন
নিম্নলিখিত যে কোনও ভূমিকা সহ প্রকল্পের সদস্যরা কোনও ইস্যুতে পোস্ট করা নোটগুলি দেখতে পারে তবে তারা কোনও নোট মুছতে বা লিখতে পারে না।
- প্রজেক্ট ভিউয়ার , ফায়ারবেস ভিউয়ার , কোয়ালিটি ভিউয়ার বা ক্র্যাশলাইটিক্স ভিউয়ার
ইন্টিগ্রেশন
অ্যাপটি Google Mobile Ads SDKও ব্যবহার করে কিন্তু ক্র্যাশ পাচ্ছে না
আপনার প্রোজেক্ট যদি Google Mobile Ads SDK-এর পাশাপাশি Crashlytics ব্যবহার করে, তাহলে ব্যতিক্রম হ্যান্ডলারদের নিবন্ধন করার সময় ক্র্যাশ রিপোর্টাররা হস্তক্ষেপ করছে। সমস্যাটি সমাধান করার জন্য, Mobile Ads ক্র্যাশ রিপোর্টিং বন্ধ করুন disableSDKCrashReporting
কল করে।
আমার বিগকুয়ারি ডেটাসেটটি কোথায় অবস্থিত?
আপনি BigQuery-এর সাথে Crashlytics লিঙ্ক করার পরে, আপনার তৈরি করা নতুন ডেটাসেটগুলি স্বয়ংক্রিয়ভাবে মার্কিন যুক্তরাষ্ট্রে অবস্থিত হবে, আপনার Firebase প্রকল্পের অবস্থান নির্বিশেষে।
রেজিস্টেড ইস্যু
একটি regressed সমস্যা কি?
আপনি যখন ইস্যুটি আগে বন্ধ করে দিয়েছেন তখন কোনও ইস্যুতে একটি রিগ্রেশন রয়েছে তবে Crashlytics একটি নতুন প্রতিবেদন পেয়েছে যে বিষয়টি পুনরায় সংঘটিত হয়েছে। Crashlytics স্বয়ংক্রিয়ভাবে এই প্রত্যাবর্তিত সমস্যাগুলি পুনরায় খোলে যাতে আপনি সেগুলিকে আপনার অ্যাপের জন্য উপযুক্ত হিসাবে সমাধান করতে পারেন।
এখানে একটি উদাহরণ দৃশ্য যা ব্যাখ্যা করে যে Crashlytics কীভাবে কোনও ইস্যুকে রিগ্রেশন হিসাবে শ্রেণিবদ্ধ করে:
- প্রথমবারের মতো, Crashlytics ক্র্যাশ "এ" সম্পর্কে একটি ক্র্যাশ রিপোর্ট পেয়েছে। Crashlytics সেই ক্র্যাশের জন্য একটি সংশ্লিষ্ট সমস্যা খোলে (ইস্যু "A")।
- আপনি এই বাগটি দ্রুত ঠিক করুন, সমস্যা "A" বন্ধ করুন এবং তারপর আপনার অ্যাপের একটি নতুন সংস্করণ প্রকাশ করুন৷
- আপনি সমস্যাটি বন্ধ করার পরে "এ" ইস্যু সম্পর্কে আরও একটি প্রতিবেদন পেয়েছেন Crashlytics ।
- প্রতিবেদনটি যদি এমন কোনো অ্যাপ সংস্করণ থেকে হয় যা Crashlytics জানত যে আপনি যখন সমস্যাটি বন্ধ করেছিলেন (অর্থাৎ সংস্করণটি কোনও ক্র্যাশের জন্য একটি ক্র্যাশ রিপোর্ট পাঠিয়েছিল), তাহলে Crashlytics সমস্যাটিকে প্রত্যাবর্তন হিসাবে বিবেচনা করবে না। বিষয়টি বন্ধ থাকবে।
- যদি প্রতিবেদনটি এমন কোনও অ্যাপ্লিকেশন সংস্করণ থেকে আসে যা Crashlytics আপনি কখন সমস্যাটি বন্ধ করে দিয়েছিলেন তা সম্পর্কে জানেন না (যার অর্থ সংস্করণটি কোনও ক্র্যাশের জন্য কোনও ক্র্যাশ রিপোর্ট কখনও প্রেরণ করেনি), তবে Crashlytics বিষয়টি পুনরায় বিবেচনা করে বিবেচনা করে এবং বিষয়টি পুনরায় খোলা হবে।
যখন একটি সমস্যা রিগ্রেস হয়, তখন আমরা একটি রিগ্রেশন শনাক্তকরণ সতর্কতা পাঠাই এবং সমস্যাটিতে একটি রিগ্রেশন সিগন্যাল যোগ করি যাতে আপনাকে জানানো হয় যে Crashlytics সমস্যাটি আবার খুলেছে। আপনি যদি আমাদের রিগ্রেশন অ্যালগরিদমের কারণে কোনও সমস্যা পুনরায় খোলা না চান তবে এটি বন্ধ করার পরিবর্তে "নিঃশব্দ"।
আমি কেন পুরানো অ্যাপ্লিকেশন সংস্করণগুলির জন্য পুনরায় চাপযুক্ত সমস্যাগুলি দেখছি?
যদি কোনও রিপোর্ট কোনও পুরানো অ্যাপ সংস্করণ থেকে হয় যেটি আপনি সমস্যাটি বন্ধ করার সময় কোনও ক্র্যাশ রিপোর্ট পাঠাননি, তাহলে Crashlytics সমস্যাটিকে প্রত্যাবর্তন বলে বিবেচনা করে এবং সমস্যাটি আবার খুলবে।
এই পরিস্থিতি নিম্নলিখিত পরিস্থিতিতে ঘটতে পারে: আপনি একটি বাগ ঠিক করেছেন এবং আপনার অ্যাপ্লিকেশনটির একটি নতুন সংস্করণ প্রকাশ করেছেন, তবে আপনার এখনও বাগ ফিক্স ছাড়াই পুরানো সংস্করণগুলিতে ব্যবহারকারী রয়েছে। যদি, সুযোগে, সেই পুরানো সংস্করণগুলির মধ্যে একটি যদি আপনি সমস্যাটি বন্ধ করে দেন তখন কোনও ক্র্যাশ রিপোর্ট কখনও প্রেরণ করেনি এবং সেই ব্যবহারকারীরা বাগের মুখোমুখি হতে শুরু করে, তবে এই ক্র্যাশ রিপোর্টগুলি একটি প্রতিরোধিত সমস্যাটিকে ট্রিগার করবে।
আপনি যদি আমাদের রিগ্রেশন অ্যালগরিদমের কারণে কোনও সমস্যা পুনরায় খোলা না চান তবে এটি বন্ধ করার পরিবর্তে "নিঃশব্দ"।
মারাত্মক হিসাবে অপ্রত্যাশিত ব্যতিক্রম রিপোর্ট করা
Crashlytics ফ্যাটাল হিসাবে অনাকাঙ্ক্ষিত ব্যতিক্রমগুলি রিপোর্ট করতে পারে (ইউনিটি এসডিকে V10.4.0 দিয়ে শুরু করে)। নিম্নলিখিত এফএকিউগুলি এই বৈশিষ্ট্যটি ব্যবহারের জন্য যুক্তি এবং সর্বোত্তম অনুশীলনগুলি ব্যাখ্যা করতে সহায়তা করে।
কেন একটি অ্যাপ্লিকেশন রিপোর্টকে মারাত্মক হিসাবে ব্যতিক্রমগুলি অনাবৃত করা উচিত?
মারাত্মক হিসাবে অপ্রয়োজনীয় ব্যতিক্রমগুলি প্রতিবেদন করে, আপনি গেমটি খেলতে পারা যায় না এমন ব্যতিক্রমগুলির ফলে কী ব্যতিক্রমগুলি হতে পারে তার আরও বাস্তবসম্মত ইঙ্গিত পাওয়া যায় - এমনকি অ্যাপটি চলতে থাকলেও।
মনে রাখবেন যে আপনি যদি মারাত্মক প্রতিবেদন শুরু করেন তবে আপনার ক্র্যাশ-মুক্ত ব্যবহারকারীদের (সিএফইউ) শতাংশ সম্ভবত হ্রাস পাবে, তবে সিএফইউ মেট্রিক আপনার অ্যাপ্লিকেশনটির সাথে শেষ ব্যবহারকারীদের অভিজ্ঞতার আরও প্রতিনিধি হবে।
কোন ব্যতিক্রম মারাত্মক হিসাবে রিপোর্ট করা হবে?
Crashlytics মারাত্মক হিসাবে অপ্রত্যাশিত ব্যতিক্রম রিপোর্ট করার জন্য, নিম্নলিখিত দুটি শর্তের উভয়ই অবশ্যই পূরণ করতে হবে:
আপনার অ্যাপ্লিকেশনটিতে সূচনা করার সময়,
ReportUncaughtExceptionsAsFatal
সম্পত্তিটি অবশ্যইtrue
সেট করতে হবে ।আপনার অ্যাপ্লিকেশন (বা একটি অন্তর্ভুক্ত গ্রন্থাগার) একটি ব্যতিক্রম ছুঁড়ে দেয় যা ধরা পড়ে না। এমন একটি ব্যতিক্রম যা তৈরি হয়েছে, তবে নিক্ষেপ করা হয়নি , এটি অনাকাঙ্ক্ষিত বলে বিবেচিত হয় না।
মারাত্মক হিসাবে অপ্রয়োজনীয় ব্যতিক্রমগুলির প্রতিবেদন সক্ষম করার পরে, আমার এখন অনেক নতুন প্রাণঘাতী রয়েছে। আমি কীভাবে এই ব্যতিক্রমগুলি সঠিকভাবে পরিচালনা করব?
আপনি যখন মারাত্মক হিসাবে আপনার অনাকাঙ্ক্ষিত ব্যতিক্রমগুলির প্রতিবেদন পেতে শুরু করেন, তখন এই অনাকাঙ্ক্ষিত ব্যতিক্রমগুলি পরিচালনা করার জন্য এখানে কিছু বিকল্প রয়েছে:
- আপনি কীভাবে এই অনাকাঙ্ক্ষিত ব্যতিক্রমগুলি ধরা এবং পরিচালনা শুরু করতে পারেন তা বিবেচনা করুন।
- ইউনিটি ডিবাগ কনসোলে এবং Crashlytics লগিং ব্যতিক্রমগুলির জন্য বিভিন্ন বিকল্প বিবেচনা করুন।
নিক্ষিপ্ত ব্যতিক্রমগুলি ধরুন এবং পরিচালনা করুন
অপ্রত্যাশিত বা ব্যতিক্রমী রাষ্ট্রগুলি প্রতিফলিত করতে ব্যতিক্রমগুলি তৈরি এবং নিক্ষেপ করা হয়। নিক্ষিপ্ত ব্যতিক্রম দ্বারা প্রতিফলিত সমস্যাগুলি সমাধান করা প্রোগ্রামটিকে একটি পরিচিত অবস্থায় ফিরিয়ে দেওয়া ( ব্যতিক্রম হ্যান্ডলিং হিসাবে পরিচিত একটি প্রক্রিয়া) জড়িত।
প্রোগ্রামটি কোনও পরিচিত অবস্থায় ফিরিয়ে না দেওয়া না হলে সমস্ত পূর্বসূরি ব্যতিক্রমগুলি ধরা এবং পরিচালনা করা সেরা অনুশীলন।
কোন ধরণের ব্যতিক্রমগুলি ধরা পড়ে এবং কোন কোড দ্বারা পরিচালিত হয় তা নিয়ন্ত্রণ করতে, মোড়ানো কোড যা try-catch
ব্লকে একটি ব্যতিক্রম তৈরি করতে পারে । নিশ্চিত করুন যে catch
স্টেটমেন্টগুলির শর্তগুলি নির্দিষ্ট ব্যতিক্রমগুলি যথাযথভাবে পরিচালনা করতে যথাসম্ভব সংকীর্ণ।
Unity ক্য বা Crashlytics ব্যতিক্রম লগ
ইস্যুটি ডিবাগ করতে সহায়তা করার জন্য unity ক্য বা Crashlytics ব্যতিক্রম রেকর্ড করার একাধিক উপায় রয়েছে।
Crashlytics ব্যবহার করার সময়, এখানে দুটি সাধারণ এবং প্রস্তাবিত বিকল্প রয়েছে:
বিকল্প 1: ইউনিটি কনসোলে মুদ্রণ করুন, তবে বিকাশ বা সমস্যা সমাধানের সময় Crashlytics রিপোর্ট করবেন না
- ডিবাগ.লগ (
Debug.LogWarning(exception)
Debug.Log(exception)
,Debug.LogError(exception)
- ডিবাগ.লগ (
বিকল্প 2: নিম্নলিখিত পরিস্থিতিতে Crashlytics ড্যাশবোর্ডে একীভূত প্রতিবেদনের জন্য Crashlytics আপলোড করুন:
- যদি কোনও ব্যতিক্রম সম্ভাব্য পরবর্তী Crashlytics ইভেন্টটি ডিবাগ করার জন্য লগইন করার মতো হয় তবে
Crashlytics.Log(exception.ToString())
ব্যবহার করুন। - ধরা এবং পরিচালনা করা সত্ত্বেও যদি কোনও ব্যতিক্রম এখনও Crashlytics রিপোর্ট করা উচিত, তবে এটি একটি ননফ্যাটাল ইভেন্ট হিসাবে লগ করতে
Crashlytics.LogException(exception)
ব্যবহার করুন।
- যদি কোনও ব্যতিক্রম সম্ভাব্য পরবর্তী Crashlytics ইভেন্টটি ডিবাগ করার জন্য লগইন করার মতো হয় তবে
তবে, আপনি যদি unity ক্য ক্লাউড ডায়াগনস্টিকগুলিতে ম্যানুয়ালি একটি মারাত্মক ইভেন্টের প্রতিবেদন করতে চান তবে আপনি Debug.LogException
ব্যবহার করতে পারেন। এই বিকল্পটি বিকল্প 1 এর মতো ইউনিটি কনসোলের ব্যতিক্রম মুদ্রণ করে তবে এটি ব্যতিক্রমটিও ছুঁড়ে দেয় (এটি নিক্ষেপ করা হয়েছে বা এখনও ধরা হয়েছে কিনা)। এটি ত্রুটিটিকে অযৌক্তিকভাবে ছুঁড়ে দেয়। এর অর্থ হ'ল এমনকি আশেপাশের Debug.LogException(exception)
try-catch
ব্লকগুলির সাথে এখনও একটি অনাকাঙ্ক্ষিত ব্যতিক্রমের ফলস্বরূপ।
অতএব, আপনি যদি নিম্নলিখিত সমস্ত কিছু করতে চান তবে Debug.LogException
কল করুন:
- Unity ক্য কনসোল ব্যতিক্রম মুদ্রণ করতে।
- মারাত্মক ঘটনা হিসাবে Crashlytics ব্যতিক্রমটি আপলোড করতে।
- ব্যতিক্রমটি ছুঁড়ে ফেলার জন্য, এটিকে একটি অনাকাঙ্ক্ষিত ব্যতিক্রম হিসাবে বিবেচনা করা উচিত এবং এটি ইউনিটি ক্লাউড ডায়াগনস্টিকগুলিতে রিপোর্ট করা উচিত।
মনে রাখবেন যে আপনি যদি unity ক্য কনসোলে একটি ধরা ব্যতিক্রম মুদ্রণ করতে চান এবং একটি ননফ্যাটাল ইভেন্ট হিসাবে Crashlytics আপলোড করতে চান তবে তার পরিবর্তে নিম্নলিখিতগুলি করুন:
try
{
methodThatThrowsMyCustomExceptionType();
}
catch(MyCustomExceptionType exception)
{
// Print the exception to the Unity console at the error level.
Debug.LogError(exception);
// Upload the exception to Crashlytics as a non-fatal event.
Crashlytics.LogException(exception); // not Debug.LogException
//
// Code that handles the exception
//
}
এই পৃষ্ঠাটি Crashlytics ব্যবহার করার বিষয়ে প্রায়শই জিজ্ঞাসিত প্রশ্নের সমস্যা সমাধানে সহায়তা এবং উত্তর প্রদান করে। আপনি যা খুঁজছেন বা অতিরিক্ত সহায়তার প্রয়োজন তা যদি আপনি খুঁজে না পান তবে ফায়ারবেস সমর্থনের সাথে যোগাযোগ করুন।
সাধারণ সমস্যা সমাধান/FAQ
ইস্যু সারণীতে কিছু সমস্যার জন্য বিভিন্ন ফর্ম্যাট (এবং কখনও কখনও "বৈকল্পিক") দেখে
Firebase কনসোলে আপনার ইস্যু টেবিলে তালিকাভুক্ত সমস্যার জন্য আপনি দুটি ভিন্ন ফর্ম্যাট লক্ষ্য করতে পারেন। এবং আপনি আপনার কিছু সমস্যার মধ্যে "ভেরিয়েন্ট" নামক একটি বৈশিষ্ট্যও লক্ষ্য করতে পারেন। এখানে কেন!
2023 এর গোড়ার দিকে, আমরা গ্রুপিং ইভেন্টগুলির জন্য একটি উন্নত বিশ্লেষণ ইঞ্জিন পাশাপাশি একটি আপডেট ডিজাইন এবং নতুন সমস্যার জন্য কিছু উন্নত বৈশিষ্ট্য (যেমন ভেরিয়েন্টস!) তৈরি করেছি। সমস্ত তথ্যের জন্য আমাদের সাম্প্রতিক ব্লগ পোস্টটি দেখুন, তবে আপনি হাইলাইটগুলির জন্য নীচে পড়তে পারেন।
Crashlytics আপনার অ্যাপ্লিকেশন থেকে সমস্ত ইভেন্ট বিশ্লেষণ করে (যেমন ক্র্যাশ, ফ্যাটালস এবং এএনআরএস) এবং ইস্যু নামক ইভেন্টগুলির গোষ্ঠী তৈরি করে-একটি ইস্যুতে সমস্ত ইভেন্টের ব্যর্থতার একটি সাধারণ বিষয় রয়েছে।
এই সমস্যাগুলির মধ্যে ইভেন্টগুলিকে গোষ্ঠীভুক্ত করার জন্য, উন্নত বিশ্লেষণ ইঞ্জিন এখন ইভেন্টের অনেক দিককে দেখে, যার মধ্যে স্ট্যাক ট্রেসের ফ্রেম, ব্যতিক্রম বার্তা, ত্রুটি কোড এবং অন্যান্য প্ল্যাটফর্ম বা ত্রুটির ধরন বৈশিষ্ট্যগুলি রয়েছে৷
যাইহোক, ইভেন্টগুলির এই গোষ্ঠীর মধ্যে, ব্যর্থতার দিকে পরিচালিত স্ট্যাকের চিহ্নগুলি আলাদা হতে পারে। একটি পৃথক স্ট্যাক ট্রেসের অর্থ একটি ভিন্ন মূল কারণ হতে পারে। কোনও ইস্যুর মধ্যে এই সম্ভাব্য পার্থক্যের প্রতিনিধিত্ব করার জন্য, আমরা এখন ইস্যুগুলির মধ্যে বৈকল্পিক তৈরি করি - প্রতিটি বৈকল্পিক একটি ইস্যুতে ইভেন্টগুলির একটি উপ -গ্রুপ যা একই ব্যর্থতা পয়েন্ট এবং অনুরূপ স্ট্যাক ট্রেস রয়েছে। ভেরিয়েন্টগুলির সাহায্যে আপনি কোনও ইস্যুর মধ্যে সর্বাধিক সাধারণ স্ট্যাক ট্রেসগুলি ডিবাগ করতে পারেন এবং বিভিন্ন মূল কারণগুলি ব্যর্থতার দিকে পরিচালিত করে কিনা তা নির্ধারণ করতে পারেন।
এই উন্নতিগুলির সাথে আপনি যা অনুভব করবেন তা এখানে:
সংশোধিত মেটাডেটা ইস্যু সারির মধ্যে প্রদর্শিত হয়
আপনার অ্যাপ্লিকেশনটিতে এখন সমস্যাগুলি বোঝা এবং ট্রায়েজ সমস্যাগুলি বোঝা সহজ।কম ডুপ্লিকেট সমস্যা
একটি লাইন নম্বর পরিবর্তনের ফলে কোনও নতুন সমস্যা হয় না।বিভিন্ন মূল কারণগুলির সাথে জটিল সমস্যাগুলির সহজ ডিবাগিং
কোনও সমস্যার মধ্যে সর্বাধিক সাধারণ স্ট্যাক ট্রেসগুলি ডিবাগ করতে ভেরিয়েন্টগুলি ব্যবহার করুন।আরও অর্থপূর্ণ সতর্কতা এবং সংকেত
একটি নতুন সমস্যা আসলে একটি নতুন বাগ উপস্থাপন করে।আরো শক্তিশালী অনুসন্ধান
প্রতিটি সমস্যায় আরও অনুসন্ধানযোগ্য মেটাডেটা থাকে, যেমন ব্যতিক্রমের ধরন এবং প্যাকেজের নাম।
এই উন্নতিগুলি কীভাবে ঘুরছে তা এখানে:
যখন আমরা আপনার অ্যাপ থেকে নতুন ইভেন্টগুলি পাই, তখন আমরা তা একটি বিদ্যমান সমস্যার সাথে মেলে কিনা তা পরীক্ষা করব।
যদি কোনও মিল না থাকে তবে আমরা স্বয়ংক্রিয়ভাবে ইভেন্টটিতে আমাদের স্মার্ট ইভেন্ট-গ্রুপিং অ্যালগরিদম প্রয়োগ করব এবং পুনর্নির্মাণ মেটাডেটা ডিজাইনের সাহায্যে একটি নতুন সমস্যা তৈরি করব।
এটিই প্রথম বড় আপডেট যা আমরা আমাদের ইভেন্ট গ্রুপিংয়ে তৈরি করছি। আপনার যদি প্রতিক্রিয়া থাকে বা কোনও সমস্যার মুখোমুখি হন তবে দয়া করে
ব্রেডক্রাম্ব লগ দেখা যাচ্ছে না
আপনি যদি ব্রেডক্র্যাম্ব লগগুলি না দেখেন তবে আমরা Google Analytics জন্য আপনার অ্যাপ্লিকেশনটির কনফিগারেশনটি পরীক্ষা করার পরামর্শ দিই। আপনি নিম্নলিখিত প্রয়োজনীয়তাগুলি পূরণ করেছেন তা নিশ্চিত করুন:
আপনি আপনার Firebase প্রকল্পে Google Analytics সক্ষম করেছেন ।
আপনি Google Analytics জন্য ডেটা শেয়ারিং সক্ষম করেছেন। আপনার বিশ্লেষণ ডেটা ভাগ করে নেওয়ার সেটিংস পরিচালনা করতে এই সেটিং সম্পর্কে আরও জানুন
আপনি করেছেনGoogle Analytics জন্য ফায়ারবেস এসডিকে যুক্ত করেছেনআপনার অ্যাপ্লিকেশন। এই SDK অবশ্যই Crashlytics SDK ছাড়াও যোগ করতে হবে।
আপনি ব্যবহার করছেনসর্বশেষ ফায়ারবেস এসডিকে সংস্করণআপনি আপনার অ্যাপ্লিকেশনটিতে যে সমস্ত পণ্য ব্যবহার করেন তার জন্য।
বেগ সতর্কতা দেখছি না
আপনি যদি বেগ সতর্কতাগুলি না দেখেন তবে নিশ্চিত হয়ে নিন যে আপনি এটি ব্যবহার করছেনক্র্যাশলিটিক্স এসডিকে 11.7.0+।
ক্র্যাশ-মুক্ত মেট্রিকগুলি দেখছেন না (বা অবিশ্বাস্য মেট্রিকগুলি দেখছেন না)
আপনি যদি ক্র্যাশ-মুক্ত মেট্রিকগুলি (যেমন ক্র্যাশ-মুক্ত ব্যবহারকারী এবং সেশনগুলির মতো) না দেখেন বা অবিশ্বাস্য মেট্রিকগুলি না দেখেন তবে নিম্নলিখিতগুলি পরীক্ষা করুন:
আপনি ব্যবহার করছেন তা নিশ্চিত করুনক্র্যাশলিটিক্স এসডিকে 11.7.0+।
আপনার ডেটা সংগ্রহের সেটিংস আপনার ক্র্যাশ-মুক্ত মেট্রিকগুলির গুণমানকে প্রভাবিত করছে না তা নিশ্চিত করুন:
আপনি যদি স্বয়ংক্রিয় ক্র্যাশ রিপোর্টিং অক্ষম করে অপ্ট-ইন রিপোর্টিং সক্ষম করেন তবে ক্র্যাশ তথ্য কেবলমাত্র ব্যবহারকারীদের কাছ থেকে Crashlytics প্রেরণ করা যেতে পারে যারা স্পষ্টভাবে ডেটা সংগ্রহে বেছে নিয়েছেন। সুতরাং, ক্র্যাশ-মুক্ত মেট্রিকগুলির যথার্থতা প্রভাবিত হবে যেহেতু Crashlytics কেবল এই অপ্ট-ইন ব্যবহারকারীদের (আপনার সমস্ত ব্যবহারকারীর চেয়ে) ক্র্যাশ তথ্য রয়েছে। এর অর্থ হ'ল আপনার ক্র্যাশ-মুক্ত মেট্রিকগুলি আপনার অ্যাপ্লিকেশনটির সামগ্রিক স্থিতিশীলতার কম নির্ভরযোগ্য এবং কম প্রতিফলিত হতে পারে।
আপনার যদি স্বয়ংক্রিয় ডেটা সংগ্রহ অক্ষম থাকে তবে আপনি Crashlytics অন-ডিভাইস ক্যাশেড প্রতিবেদনগুলি প্রেরণে
sendUnsentReports
ব্যবহার করতে পারেন। এই পদ্ধতিটি ব্যবহার করা Crashlytics ক্র্যাশ ডেটা প্রেরণ করবে, তবে সেশন ডেটা নয় যা কনসোল চার্টগুলি ক্র্যাশ-মুক্ত মেট্রিকগুলির জন্য কম বা শূন্য মানগুলি দেখায়।
ক্র্যাশ-মুক্ত ব্যবহারকারীরা কীভাবে গণনা করা হয়?
Crashlytics ড্যাশবোর্ডে অ্যান্ড্রয়েড অ্যাপ্লিকেশনগুলির জন্য অনিচ্ছাকৃত স্ট্যাক ট্রেসগুলি দেখে
আপনি যদি ইউনিটি আইএল 2 সিপিপিপি ব্যবহার করছেন এবং আপনি সংবেদনশীল স্ট্যাক ট্রেসগুলি দেখছেন, তবে নিম্নলিখিতটি ব্যবহার করে দেখুন:
নিশ্চিত হয়ে নিন যে আপনি v8.6.1 বা Crashlytics ইউনিটি এসডিকে -র উচ্চতর ব্যবহার করছেন।
নিশ্চিত হয়ে নিন যে আপনি Firebase সিএলআই
crashlytics:symbols:upload
কমান্ড।আপনি প্রতিবার এই সিএলআই কমান্ডটি চালাতে হবে যে আপনি কোনও রিলিজ বিল্ড বা এমন কোনও বিল্ড তৈরি করেন যার জন্য আপনি Firebase কনসোলে প্রতীকী স্ট্যাক ট্রেস দেখতে চান। পঠনযোগ্য ক্র্যাশ রিপোর্টস পৃষ্ঠায় আরও জানুন।
আইএল 2 সিপিপি ব্যবহার করে এমন অ্যাপ্লিকেশনগুলির সাথে Crashlytics ব্যবহার করা যেতে পারে?
হ্যাঁ, Crashlytics আপনার অ্যাপ্লিকেশনগুলির জন্য প্রতীকী স্ট্যাক ট্রেসগুলি প্রদর্শন করতে পারে যা আইএল 2 সিপিপি ব্যবহার করে। এই ক্ষমতাটি অ্যান্ড্রয়েড বা অ্যাপল প্ল্যাটফর্মগুলিতে প্রকাশিত অ্যাপ্লিকেশনগুলির জন্য উপলব্ধ। আপনাকে যা করতে হবে তা এখানে:
নিশ্চিত হয়ে নিন যে আপনি v8.6.0 বা Crashlytics ইউনিটি এসডিকে -র উচ্চতর ব্যবহার করছেন।
আপনার প্ল্যাটফর্মের জন্য প্রয়োজনীয় কাজগুলি সম্পূর্ণ করুন:
অ্যাপল প্ল্যাটফর্ম অ্যাপ্লিকেশনগুলির জন্য : কোনও বিশেষ ক্রিয়াকলাপের প্রয়োজন নেই। অ্যাপল প্ল্যাটফর্ম অ্যাপ্লিকেশনগুলির জন্য, ফায়ারবেস ইউনিটি সম্পাদক প্লাগইন স্বয়ংক্রিয়ভাবে আপনার এক্সকোড প্রকল্পটি প্রতীকগুলি আপলোড করতে কনফিগার করে।
অ্যান্ড্রয়েড অ্যাপ্লিকেশনগুলির জন্য : নিশ্চিত হয়ে নিন যে আপনি Firebase সিএলআই
crashlytics:symbols:upload
কমান্ড।আপনি প্রতিবার এই সিএলআই কমান্ডটি চালাতে হবে যে আপনি কোনও রিলিজ বিল্ড বা এমন কোনও বিল্ড তৈরি করেন যার জন্য আপনি Firebase কনসোলে প্রতীকী স্ট্যাক ট্রেস দেখতে চান। পঠনযোগ্য ক্র্যাশ রিপোর্টস পৃষ্ঠায় আরও জানুন।
কে কোনও ইস্যুতে নোটগুলি দেখতে, লিখতে এবং মুছতে পারে?
নোটগুলি প্রকল্পের সদস্যদের প্রশ্ন, স্ট্যাটাস আপডেট ইত্যাদির সাথে নির্দিষ্ট বিষয়ে মন্তব্য করার অনুমতি দেয়।
যখন কোনও প্রকল্পের সদস্য একটি নোট পোস্ট করেন, এটি তাদের গুগল অ্যাকাউন্টের ইমেল সহ লেবেলযুক্ত। এই ইমেল ঠিকানাটি নোটের পাশাপাশি নোটটি দেখার জন্য অ্যাক্সেস সহ সমস্ত প্রকল্পের সদস্যদের কাছে দৃশ্যমান।
নিম্নলিখিত নোটগুলি দেখতে, লিখতে এবং মুছতে প্রয়োজনীয় অ্যাক্সেসের বর্ণনা দেয়:
নিম্নলিখিত যেকোনও ভূমিকা সহ প্রকল্প সদস্যরা বিদ্যমান নোটগুলি দেখতে এবং মুছে ফেলতে পারেন এবং একটি সমস্যায় নতুন নোট লিখতে পারেন।
- প্রকল্পের মালিক বা সম্পাদক , ফায়ারবেস অ্যাডমিন , কোয়ালিটি অ্যাডমিন বা ক্র্যাশলাইটিক্স অ্যাডমিন
নিম্নলিখিত যে কোনও ভূমিকা সহ প্রকল্পের সদস্যরা কোনও ইস্যুতে পোস্ট করা নোটগুলি দেখতে পারে তবে তারা কোনও নোট মুছতে বা লিখতে পারে না।
- প্রজেক্ট ভিউয়ার , ফায়ারবেস ভিউয়ার , কোয়ালিটি ভিউয়ার বা ক্র্যাশলাইটিক্স ভিউয়ার
ইন্টিগ্রেশন
অ্যাপটি Google Mobile Ads SDKও ব্যবহার করে কিন্তু ক্র্যাশ পাচ্ছে না
আপনার প্রোজেক্ট যদি Google Mobile Ads SDK-এর পাশাপাশি Crashlytics ব্যবহার করে, তাহলে ব্যতিক্রম হ্যান্ডলারদের নিবন্ধন করার সময় ক্র্যাশ রিপোর্টাররা হস্তক্ষেপ করছে। সমস্যাটি সমাধান করার জন্য, Mobile Ads ক্র্যাশ রিপোর্টিং বন্ধ করুন disableSDKCrashReporting
কল করে।
আমার বিগকুয়ারি ডেটাসেটটি কোথায় অবস্থিত?
আপনি BigQuery-এর সাথে Crashlytics লিঙ্ক করার পরে, আপনার তৈরি করা নতুন ডেটাসেটগুলি স্বয়ংক্রিয়ভাবে মার্কিন যুক্তরাষ্ট্রে অবস্থিত হবে, আপনার Firebase প্রকল্পের অবস্থান নির্বিশেষে।
রেজিস্টেড ইস্যু
একটি regressed সমস্যা কি?
আপনি যখন ইস্যুটি আগে বন্ধ করে দিয়েছেন তখন কোনও ইস্যুতে একটি রিগ্রেশন রয়েছে তবে Crashlytics একটি নতুন প্রতিবেদন পেয়েছে যে বিষয়টি পুনরায় সংঘটিত হয়েছে। Crashlytics স্বয়ংক্রিয়ভাবে এই প্রত্যাবর্তিত সমস্যাগুলি পুনরায় খোলে যাতে আপনি সেগুলিকে আপনার অ্যাপের জন্য উপযুক্ত হিসাবে সমাধান করতে পারেন।
এখানে একটি উদাহরণ দৃশ্য যা ব্যাখ্যা করে যে Crashlytics কীভাবে কোনও ইস্যুকে রিগ্রেশন হিসাবে শ্রেণিবদ্ধ করে:
- প্রথমবারের মতো, Crashlytics ক্র্যাশ "এ" সম্পর্কে একটি ক্র্যাশ রিপোর্ট পেয়েছে। Crashlytics সেই ক্র্যাশের জন্য একটি সংশ্লিষ্ট সমস্যা খোলে (ইস্যু "A")।
- আপনি এই বাগটি দ্রুত ঠিক করুন, সমস্যা "A" বন্ধ করুন এবং তারপর আপনার অ্যাপের একটি নতুন সংস্করণ প্রকাশ করুন৷
- আপনি সমস্যাটি বন্ধ করার পরে "এ" ইস্যু সম্পর্কে আরও একটি প্রতিবেদন পেয়েছেন Crashlytics ।
- প্রতিবেদনটি যদি এমন কোনো অ্যাপ সংস্করণ থেকে হয় যা Crashlytics জানত যে আপনি যখন সমস্যাটি বন্ধ করেছিলেন (অর্থাৎ সংস্করণটি কোনও ক্র্যাশের জন্য একটি ক্র্যাশ রিপোর্ট পাঠিয়েছিল), তাহলে Crashlytics সমস্যাটিকে প্রত্যাবর্তন হিসাবে বিবেচনা করবে না। বিষয়টি বন্ধ থাকবে।
- যদি প্রতিবেদনটি এমন কোনও অ্যাপ্লিকেশন সংস্করণ থেকে আসে যা Crashlytics আপনি কখন সমস্যাটি বন্ধ করে দিয়েছিলেন তা সম্পর্কে জানেন না (যার অর্থ সংস্করণটি কোনও ক্র্যাশের জন্য কোনও ক্র্যাশ রিপোর্ট কখনও প্রেরণ করেনি), তবে Crashlytics বিষয়টি পুনরায় বিবেচনা করে বিবেচনা করে এবং বিষয়টি পুনরায় খোলা হবে।
যখন একটি সমস্যা রিগ্রেস হয়, তখন আমরা একটি রিগ্রেশন শনাক্তকরণ সতর্কতা পাঠাই এবং সমস্যাটিতে একটি রিগ্রেশন সিগন্যাল যোগ করি যাতে আপনাকে জানানো হয় যে Crashlytics সমস্যাটি আবার খুলেছে। আপনি যদি আমাদের রিগ্রেশন অ্যালগরিদমের কারণে কোনও সমস্যা পুনরায় খোলা না চান তবে এটি বন্ধ করার পরিবর্তে "নিঃশব্দ"।
আমি কেন পুরানো অ্যাপ্লিকেশন সংস্করণগুলির জন্য পুনরায় চাপযুক্ত সমস্যাগুলি দেখছি?
যদি কোনও রিপোর্ট কোনও পুরানো অ্যাপ সংস্করণ থেকে হয় যেটি আপনি সমস্যাটি বন্ধ করার সময় কোনও ক্র্যাশ রিপোর্ট পাঠাননি, তাহলে Crashlytics সমস্যাটিকে প্রত্যাবর্তন বলে বিবেচনা করে এবং সমস্যাটি আবার খুলবে।
এই পরিস্থিতি নিম্নলিখিত পরিস্থিতিতে ঘটতে পারে: আপনি একটি বাগ ঠিক করেছেন এবং আপনার অ্যাপ্লিকেশনটির একটি নতুন সংস্করণ প্রকাশ করেছেন, তবে আপনার এখনও বাগ ফিক্স ছাড়াই পুরানো সংস্করণগুলিতে ব্যবহারকারী রয়েছে। যদি, সুযোগে, সেই পুরানো সংস্করণগুলির মধ্যে একটি যদি আপনি সমস্যাটি বন্ধ করে দেন তখন কোনও ক্র্যাশ রিপোর্ট কখনও প্রেরণ করেনি এবং সেই ব্যবহারকারীরা বাগের মুখোমুখি হতে শুরু করে, তবে এই ক্র্যাশ রিপোর্টগুলি একটি প্রতিরোধিত সমস্যাটিকে ট্রিগার করবে।
আপনি যদি আমাদের রিগ্রেশন অ্যালগরিদমের কারণে কোনও সমস্যা পুনরায় খোলা না চান তবে এটি বন্ধ করার পরিবর্তে "নিঃশব্দ"।
মারাত্মক হিসাবে অপ্রত্যাশিত ব্যতিক্রম রিপোর্ট করা
Crashlytics ফ্যাটাল হিসাবে অনাকাঙ্ক্ষিত ব্যতিক্রমগুলি রিপোর্ট করতে পারে (ইউনিটি এসডিকে V10.4.0 দিয়ে শুরু করে)। নিম্নলিখিত এফএকিউগুলি এই বৈশিষ্ট্যটি ব্যবহারের জন্য যুক্তি এবং সর্বোত্তম অনুশীলনগুলি ব্যাখ্যা করতে সহায়তা করে।
কেন একটি অ্যাপ্লিকেশন রিপোর্টকে মারাত্মক হিসাবে ব্যতিক্রমগুলি অনাবৃত করা উচিত?
মারাত্মক হিসাবে অপ্রয়োজনীয় ব্যতিক্রমগুলি প্রতিবেদন করে, আপনি গেমটি খেলতে পারা যায় না এমন ব্যতিক্রমগুলির ফলে কী ব্যতিক্রমগুলি হতে পারে তার আরও বাস্তবসম্মত ইঙ্গিত পাওয়া যায় - এমনকি অ্যাপটি চলতে থাকলেও।
মনে রাখবেন যে আপনি যদি মারাত্মক প্রতিবেদন শুরু করেন তবে আপনার ক্র্যাশ-মুক্ত ব্যবহারকারীদের (সিএফইউ) শতাংশ সম্ভবত হ্রাস পাবে, তবে সিএফইউ মেট্রিক আপনার অ্যাপ্লিকেশনটির সাথে শেষ ব্যবহারকারীদের অভিজ্ঞতার আরও প্রতিনিধি হবে।
কোন ব্যতিক্রম মারাত্মক হিসাবে রিপোর্ট করা হবে?
Crashlytics মারাত্মক হিসাবে অপ্রত্যাশিত ব্যতিক্রম রিপোর্ট করার জন্য, নিম্নলিখিত দুটি শর্তের উভয়ই অবশ্যই পূরণ করতে হবে:
আপনার অ্যাপ্লিকেশনটিতে সূচনা করার সময়,
ReportUncaughtExceptionsAsFatal
সম্পত্তিটি অবশ্যইtrue
সেট করতে হবে ।আপনার অ্যাপ্লিকেশন (বা একটি অন্তর্ভুক্ত গ্রন্থাগার) একটি ব্যতিক্রম ছুঁড়ে দেয় যা ধরা পড়ে না। এমন একটি ব্যতিক্রম যা তৈরি হয়েছে, তবে নিক্ষেপ করা হয়নি , এটি অনাকাঙ্ক্ষিত বলে বিবেচিত হয় না।
মারাত্মক হিসাবে অপ্রয়োজনীয় ব্যতিক্রমগুলির প্রতিবেদন সক্ষম করার পরে, আমার এখন অনেক নতুন প্রাণঘাতী রয়েছে। আমি কীভাবে এই ব্যতিক্রমগুলি সঠিকভাবে পরিচালনা করব?
When you start getting reports of your uncaught exceptions as fatals, here are some options for handling these uncaught exceptions:
- Consider how you can start catching and handling these uncaught exceptions.
- Consider different options for logging exceptions to the Unity debug console and to Crashlytics .
Catch and handle thrown exceptions
Exceptions are created and thrown to reflect unexpected or exceptional states . Resolving the issues reflected by a thrown exception involves returning the program to a known state (a process known as exception handling ).
It's best practice to catch and handle all foreseen exceptions unless the program cannot be returned to a known state.
To control which sorts of exceptions are caught and handled by what code, wrap code that might generate an exception in a try-catch
block . Make sure that the conditions in the catch
statements are as narrow as possible to handle the specific exceptions appropriately.
Log exceptions in Unity or Crashlytics
There are multiple ways to record exceptions in Unity or Crashlytics to help debug the issue.
When using Crashlytics , here are the two most common and recommended options:
Option 1: Print in the Unity console, but don't report to Crashlytics , during development or troubleshooting
- Print to the Unity console using
Debug.Log(exception)
,Debug.LogWarning(exception)
, andDebug.LogError(exception)
which print the contents of the exception to the Unity console and don't re-throw the exception.
- Print to the Unity console using
Option 2: Upload to Crashlytics for consolidated reporting in the Crashlytics dashboard for the following situations:
- If an exception is worth logging to debug a possible subsequent Crashlytics event, then use
Crashlytics.Log(exception.ToString())
. - If an exception should still be reported to Crashlytics despite being caught and handled, then use
Crashlytics.LogException(exception)
to log it as a nonfatal event.
- If an exception is worth logging to debug a possible subsequent Crashlytics event, then use
However, if you want to manually report a fatal event to Unity Cloud Diagnostics, you can use Debug.LogException
. This option prints the exception to the Unity console like Option 1, but it also throws the exception (whether or not it has been thrown or caught yet). It throws the error nonlocally. This means that even a surrounding Debug.LogException(exception)
with try-catch
blocks still results in an uncaught exception.
Therefore, call Debug.LogException
if and only if you want to do all of the following:
- To print the exception to the Unity console.
- To upload the exception to Crashlytics as a fatal event.
- To throw the exception, have it be treated as an uncaught exception, and have it be reported to Unity Cloud Diagnostics.
Note that if you want to print a caught exception to the Unity console and upload to Crashlytics as a nonfatal event, do the following instead:
try
{
methodThatThrowsMyCustomExceptionType();
}
catch(MyCustomExceptionType exception)
{
// Print the exception to the Unity console at the error level.
Debug.LogError(exception);
// Upload the exception to Crashlytics as a non-fatal event.
Crashlytics.LogException(exception); // not Debug.LogException
//
// Code that handles the exception
//
}
এই পৃষ্ঠাটি Crashlytics ব্যবহার করার বিষয়ে প্রায়শই জিজ্ঞাসিত প্রশ্নের সমস্যা সমাধানে সহায়তা এবং উত্তর প্রদান করে। If you can't find what you're looking for or need additional help, contact Firebase support .
General troubleshooting/FAQ
Seeing different formats (and sometimes "variants") for some issues in the Issues table
Firebase কনসোলে আপনার ইস্যু টেবিলে তালিকাভুক্ত সমস্যার জন্য আপনি দুটি ভিন্ন ফর্ম্যাট লক্ষ্য করতে পারেন। এবং আপনি আপনার কিছু সমস্যার মধ্যে "ভেরিয়েন্ট" নামক একটি বৈশিষ্ট্যও লক্ষ্য করতে পারেন। এখানে কেন!
In early 2023, we rolled out an improved analysis engine for grouping events as well as an updated design and some advanced features for new issues (like variants!). Check out our recent blog post for all the details, but you can read below for the highlights.
Crashlytics analyzes all the events from your app (like crashes, non-fatals, and ANRs) and creates groups of events called issues — all events in an issue have a common point of failure.
এই সমস্যাগুলির মধ্যে ইভেন্টগুলিকে গোষ্ঠীভুক্ত করার জন্য, উন্নত বিশ্লেষণ ইঞ্জিন এখন ইভেন্টের অনেক দিককে দেখে, যার মধ্যে স্ট্যাক ট্রেসের ফ্রেম, ব্যতিক্রম বার্তা, ত্রুটি কোড এবং অন্যান্য প্ল্যাটফর্ম বা ত্রুটির ধরন বৈশিষ্ট্যগুলি রয়েছে৷
However, within this group of events, the stack traces leading to the failure might be different. A different stack trace could mean a different root cause. To represent this possible difference within an issue, we now create variants within issues - each variant is a sub-group of events in an issue that have the same failure point and a similar stack trace. With variants, you can debug the most common stack traces within an issue and determine if different root causes are leading to the failure.
এই উন্নতিগুলির সাথে আপনি যা অনুভব করবেন তা এখানে:
সংশোধিত মেটাডেটা ইস্যু সারির মধ্যে প্রদর্শিত হয়
It's now easier to understand and triage issues in your app.কম ডুপ্লিকেট সমস্যা
A line number change doesn't result in a new issue.Easier debugging of complex issues with various root causes
Use variants to debug the most common stack traces within an issue.আরও অর্থপূর্ণ সতর্কতা এবং সংকেত
A new issue actually represents a new bug.আরো শক্তিশালী অনুসন্ধান
প্রতিটি সমস্যায় আরও অনুসন্ধানযোগ্য মেটাডেটা থাকে, যেমন ব্যতিক্রমের ধরন এবং প্যাকেজের নাম।
Here's how these improvements are rolling out:
যখন আমরা আপনার অ্যাপ থেকে নতুন ইভেন্টগুলি পাই, তখন আমরা তা একটি বিদ্যমান সমস্যার সাথে মেলে কিনা তা পরীক্ষা করব।
If there's no match, we'll automatically apply our smarter event-grouping algorithm to the event and create a new issue with the revamped metadata design.
এটিই প্রথম বড় আপডেট যা আমরা আমাদের ইভেন্ট গ্রুপিংয়ে তৈরি করছি। If you have feedback or encounter any issues, please let us know by
ব্রেডক্রাম্ব লগ দেখা যাচ্ছে না
If you're not seeing breadcrumb logs , we recommend checking your app's configuration for Google Analytics . Make sure you meet the following requirements:
আপনি আপনার Firebase প্রকল্পে Google Analytics সক্ষম করেছেন ।
আপনি Google Analytics জন্য ডেটা শেয়ারিং সক্ষম করেছেন। Learn more about this setting in Manage your Analytics data sharing settings
আপনি করেছেনadded the Firebase SDK for Google Analyticsto your app. এই SDK অবশ্যই Crashlytics SDK ছাড়াও যোগ করতে হবে।
You're using thelatest Firebase SDK versionsfor all the products that you use in your app.
Not seeing velocity alerts
If you're not seeing velocity alerts, make sure that you're using theCrashlytics SDK 11.7.0+.
Not seeing crash-free metrics (or seeing unreliable metrics)
If you're not seeing crash-free metrics (like crash-free users and sessions) or seeing unreliable metrics, check the following:
Make sure that you're using theCrashlytics SDK 11.7.0+.
Make sure that your data collection settings aren't impacting the quality of your crash-free metrics:
If you enable opt-in reporting by disabling automatic crash reporting, crash information can only be sent to Crashlytics from users who have explicitly opted into data collection. Thus, the accuracy of crash-free metrics will be affected since Crashlytics only has crash information from these opted-in users (rather than all your users). This means that your crash-free metrics may be less reliable and less reflective of the overall stability of your app.
If you have automatic data collection disabled, you can use
sendUnsentReports
to send on-device cached reports to Crashlytics . Using this method will send crash data to Crashlytics , but not sessions data which causes the console charts to show low or zero values for crash-free metrics.
How are crash-free users calculated?
Seeing unsymbolicated stack traces for Android apps in the Crashlytics dashboard
If you're using Unity IL2CPP and you're seeing unsymbolicated stack traces, then try the following:
Make sure that you're using v8.6.1 or higher of the Crashlytics Unity SDK.
Make sure that you're set up for and running the Firebase CLI
crashlytics:symbols:upload
command to generate and upload your symbol file.You need to run this CLI command each time that you create a release build or any build for which you want to see symbolicated stack traces in the Firebase console. Learn more in the Get readable crash reports page.
Can Crashlytics be used with apps that use IL2CPP?
Yes, Crashlytics can display symbolicated stack traces for your apps that use IL2CPP. This capability is available for apps released on either Android or Apple platforms. আপনাকে যা করতে হবে তা এখানে:
Make sure that you're using v8.6.0 or higher of the Crashlytics Unity SDK.
Complete the necessary tasks for your platform:
For Apple platform apps : No special actions are needed. For Apple platform apps, the Firebase Unity Editor plugin automatically configures your Xcode project to upload symbols.
For Android apps : Make sure that you're set up for and running the Firebase CLI
crashlytics:symbols:upload
command to generate and upload your symbol file.You need to run this CLI command each time that you create a release build or any build for which you want to see symbolicated stack traces in the Firebase console. Learn more in the Get readable crash reports page.
Who can view, write, and delete notes on an issue?
নোটগুলি প্রকল্পের সদস্যদের প্রশ্ন, স্ট্যাটাস আপডেট ইত্যাদির সাথে নির্দিষ্ট বিষয়ে মন্তব্য করার অনুমতি দেয়।
When a project member posts a note, it's labeled with the email of their Google account. This email address is visible, along with the note, to all project members with access to view the note.
The following describes the access required to view, write, and delete notes:
নিম্নলিখিত যেকোনও ভূমিকা সহ প্রকল্প সদস্যরা বিদ্যমান নোটগুলি দেখতে এবং মুছে ফেলতে পারেন এবং একটি সমস্যায় নতুন নোট লিখতে পারেন।
- প্রকল্পের মালিক বা সম্পাদক , ফায়ারবেস অ্যাডমিন , কোয়ালিটি অ্যাডমিন বা ক্র্যাশলাইটিক্স অ্যাডমিন
Project members with any of the following roles can view the notes posted on an issue, but they cannot delete or write a note.
- প্রজেক্ট ভিউয়ার , ফায়ারবেস ভিউয়ার , কোয়ালিটি ভিউয়ার বা ক্র্যাশলাইটিক্স ভিউয়ার
ইন্টিগ্রেশন
অ্যাপটি Google Mobile Ads SDKও ব্যবহার করে কিন্তু ক্র্যাশ পাচ্ছে না
আপনার প্রোজেক্ট যদি Google Mobile Ads SDK-এর পাশাপাশি Crashlytics ব্যবহার করে, তাহলে ব্যতিক্রম হ্যান্ডলারদের নিবন্ধন করার সময় ক্র্যাশ রিপোর্টাররা হস্তক্ষেপ করছে। To fix the issue, turn off crash reporting in the Mobile Ads SDK by calling disableSDKCrashReporting
.
Where is my BigQuery dataset located?
আপনি BigQuery-এর সাথে Crashlytics লিঙ্ক করার পরে, আপনার তৈরি করা নতুন ডেটাসেটগুলি স্বয়ংক্রিয়ভাবে মার্কিন যুক্তরাষ্ট্রে অবস্থিত হবে, আপনার Firebase প্রকল্পের অবস্থান নির্বিশেষে।
Regressed issues
একটি regressed সমস্যা কি?
An issue has had a regression when you've previously closed the issue but Crashlytics gets a new report that the issue has re-occurred. Crashlytics স্বয়ংক্রিয়ভাবে এই প্রত্যাবর্তিত সমস্যাগুলি পুনরায় খোলে যাতে আপনি সেগুলিকে আপনার অ্যাপের জন্য উপযুক্ত হিসাবে সমাধান করতে পারেন।
Here's an example scenario that explains how Crashlytics categorizes an issue as a regression:
- For the first time ever, Crashlytics gets a crash report about Crash "A". Crashlytics সেই ক্র্যাশের জন্য একটি সংশ্লিষ্ট সমস্যা খোলে (ইস্যু "A")।
- আপনি এই বাগটি দ্রুত ঠিক করুন, সমস্যা "A" বন্ধ করুন এবং তারপর আপনার অ্যাপের একটি নতুন সংস্করণ প্রকাশ করুন৷
- Crashlytics gets another report about Issue "A" after you've closed the issue.
- প্রতিবেদনটি যদি এমন কোনো অ্যাপ সংস্করণ থেকে হয় যা Crashlytics জানত যে আপনি যখন সমস্যাটি বন্ধ করেছিলেন (অর্থাৎ সংস্করণটি কোনও ক্র্যাশের জন্য একটি ক্র্যাশ রিপোর্ট পাঠিয়েছিল), তাহলে Crashlytics সমস্যাটিকে প্রত্যাবর্তন হিসাবে বিবেচনা করবে না। বিষয়টি বন্ধ থাকবে।
- If the report is from an app version that Crashlytics did not know about when you closed the issue (meaning that the version had never sent any crash report for any crash at all), then Crashlytics considers the issue regressed and will re-open the issue.
যখন একটি সমস্যা রিগ্রেস হয়, তখন আমরা একটি রিগ্রেশন শনাক্তকরণ সতর্কতা পাঠাই এবং সমস্যাটিতে একটি রিগ্রেশন সিগন্যাল যোগ করি যাতে আপনাকে জানানো হয় যে Crashlytics সমস্যাটি আবার খুলেছে। If you do not want an issue to re-open due to our regression algorithm, "mute" the issue instead of closing it.
Why am I seeing regressed issues for older app versions?
যদি কোনও রিপোর্ট কোনও পুরানো অ্যাপ সংস্করণ থেকে হয় যেটি আপনি সমস্যাটি বন্ধ করার সময় কোনও ক্র্যাশ রিপোর্ট পাঠাননি, তাহলে Crashlytics সমস্যাটিকে প্রত্যাবর্তন বলে বিবেচনা করে এবং সমস্যাটি আবার খুলবে।
This situation can happen in the following situation: You've fixed a bug and released a new version of your app, but you still have users on older versions without the bug fix. If, by chance, one of those older versions had never sent any crash reports at all when you closed the issue, and those users start encountering the bug, then those crash reports would trigger a regressed issue.
If you do not want an issue to re-open due to our regression algorithm, "mute" the issue instead of closing it.
Reporting uncaught exceptions as fatals
Crashlytics can report uncaught exceptions as fatals (starting with v10.4.0 of the Unity SDK). The following FAQs help to explain the rationale and best practices for using this feature.
Why should an app report uncaught exceptions as fatals?
By reporting uncaught exceptions as fatals, you get a more realistic indication of what exceptions may result in the game being unplayable – even if the app continues to run.
Note that if you start reporting fatals, your crash-free users (CFU) percentage will likely decrease, but the CFU metric will be more representative of the end-users' experiences with your app.
Which exceptions will be reported as fatals?
In order for Crashlytics to report an uncaught exception as fatal, both of the following two conditions must be met:
During initialization in your app, the
ReportUncaughtExceptionsAsFatal
property must be set totrue
.Your app (or an included library) throws an exception that isn't caught. An exception that's created, but not thrown , is not considered uncaught.
After enabling reporting of uncaught exceptions as fatals, I now have many new fatals. How do I properly handle these exceptions?
When you start getting reports of your uncaught exceptions as fatals, here are some options for handling these uncaught exceptions:
- Consider how you can start catching and handling these uncaught exceptions.
- Consider different options for logging exceptions to the Unity debug console and to Crashlytics .
Catch and handle thrown exceptions
Exceptions are created and thrown to reflect unexpected or exceptional states . Resolving the issues reflected by a thrown exception involves returning the program to a known state (a process known as exception handling ).
It's best practice to catch and handle all foreseen exceptions unless the program cannot be returned to a known state.
To control which sorts of exceptions are caught and handled by what code, wrap code that might generate an exception in a try-catch
block . Make sure that the conditions in the catch
statements are as narrow as possible to handle the specific exceptions appropriately.
Log exceptions in Unity or Crashlytics
There are multiple ways to record exceptions in Unity or Crashlytics to help debug the issue.
When using Crashlytics , here are the two most common and recommended options:
Option 1: Print in the Unity console, but don't report to Crashlytics , during development or troubleshooting
- Print to the Unity console using
Debug.Log(exception)
,Debug.LogWarning(exception)
, andDebug.LogError(exception)
which print the contents of the exception to the Unity console and don't re-throw the exception.
- Print to the Unity console using
Option 2: Upload to Crashlytics for consolidated reporting in the Crashlytics dashboard for the following situations:
- If an exception is worth logging to debug a possible subsequent Crashlytics event, then use
Crashlytics.Log(exception.ToString())
. - If an exception should still be reported to Crashlytics despite being caught and handled, then use
Crashlytics.LogException(exception)
to log it as a nonfatal event.
- If an exception is worth logging to debug a possible subsequent Crashlytics event, then use
However, if you want to manually report a fatal event to Unity Cloud Diagnostics, you can use Debug.LogException
. This option prints the exception to the Unity console like Option 1, but it also throws the exception (whether or not it has been thrown or caught yet). It throws the error nonlocally. This means that even a surrounding Debug.LogException(exception)
with try-catch
blocks still results in an uncaught exception.
Therefore, call Debug.LogException
if and only if you want to do all of the following:
- To print the exception to the Unity console.
- To upload the exception to Crashlytics as a fatal event.
- To throw the exception, have it be treated as an uncaught exception, and have it be reported to Unity Cloud Diagnostics.
Note that if you want to print a caught exception to the Unity console and upload to Crashlytics as a nonfatal event, do the following instead:
try
{
methodThatThrowsMyCustomExceptionType();
}
catch(MyCustomExceptionType exception)
{
// Print the exception to the Unity console at the error level.
Debug.LogError(exception);
// Upload the exception to Crashlytics as a non-fatal event.
Crashlytics.LogException(exception); // not Debug.LogException
//
// Code that handles the exception
//
}