আপনার প্রকল্প ডিবাগ করুন

স্থানীয় ক্র্যাশগুলি ডিবাগ করুন৷

আপনি যদি একটি নেটিভ ক্র্যাশ ডাম্প বা সমাধির পাথর বোঝার জন্য সংগ্রাম করছেন, তাহলে নেটিভ অ্যান্ড্রয়েড প্ল্যাটফর্ম কোড ডিবাগিং একটি ভাল ভূমিকা।

সাধারণ ধরনের ক্র্যাশের একটি পূর্ণাঙ্গ ক্যাটালগ এবং কীভাবে সেগুলি তদন্ত করতে হয়, দেখুন নেটিভ ক্র্যাশগুলি নির্ণয় করা

ndk-স্ট্যাক টুল আপনার ক্র্যাশের প্রতীক হিসেবে সাহায্য করতে পারে। আপনি অ্যান্ড্রয়েড স্টুডিওতে ক্র্যাশগুলি ডিবাগ করতে পারেন যেমন আপনার অ্যাপ ডকুমেন্টেশন ডিবাগ করুন । আপনি যদি কমান্ড-লাইন ব্যবহার করতে পছন্দ করেন, ndk-gdb আপনাকে আপনার শেল থেকে gdb বা lldb সংযুক্ত করতে দেয়।

অ্যাপগুলিকে সমাধির পাথরের চিহ্নগুলিতে সরাসরি অ্যাক্সেস প্রদান করুন

Android 12 (API স্তর 31) থেকে শুরু করে, আপনি ApplicationExitInfo.getTraceInputStream() পদ্ধতির মাধ্যমে প্রোটোকল বাফার হিসাবে আপনার অ্যাপের নেটিভ ক্র্যাশ সমাধির পাথর অ্যাক্সেস করতে পারেন। প্রোটোকল বাফার এই স্কিমা ব্যবহার করে সিরিয়াল করা হয়। পূর্বে, এই তথ্যে অ্যাক্সেস পাওয়ার একমাত্র উপায় ছিল অ্যান্ড্রয়েড ডিবাগ ব্রিজ (এডিবি)।

আপনার অ্যাপে এটি কীভাবে প্রয়োগ করবেন তার একটি উদাহরণ এখানে রয়েছে:

ActivityManager activityManager: ActivityManager = getSystemService(Context.ACTIVITY_SERVICE);
MutableList<ApplicationExitInfo> exitReasons = activityManager.getHistoricalProcessExitReasons(/* packageName = */ null, /* pid = */ 0, /* maxNum = */ 5);
for (ApplicationExitInfo aei: exitReasons) {
    if (aei.getReason() == REASON_CRASH_NATIVE) {
        // Get the tombstone input stream.
        InputStream trace = aei.getTraceInputStream();
        // The tombstone parser built with protoc uses the tombstone schema, then parses the trace.
        Tombstone tombstone = Tombstone.parseFrom(trace);
    }
}

নেটিভ মেমরি সমস্যা ডিবাগ করুন

অ্যাড্রেস স্যানিটাইজার (HWASan/ASan)

HWAddress Sanitizer (HWASan) এবং Address Sanitizer (ASan) Valgrind-এর মতই, কিন্তু উল্লেখযোগ্যভাবে দ্রুত এবং Android-এ অনেক ভাল সমর্থিত।

অ্যান্ড্রয়েডে মেমরি ত্রুটিগুলি ডিবাগ করার জন্য এটি আপনার সেরা বিকল্প।

Malloc ডিবাগ

নেটিভ মেমরি সমস্যাগুলি ডিবাগ করার জন্য সি লাইব্রেরির অন্তর্নির্মিত বিকল্পগুলির একটি পুঙ্খানুপুঙ্খ বিবরণের জন্য libc কলব্যাক ব্যবহার করে Malloc ডিবাগ এবং নেটিভ মেমরি ট্র্যাকিং দেখুন।

ম্যালোক হুক

আপনি যদি নিজের টুল তৈরি করতে চান, তাহলে অ্যান্ড্রয়েডের libc প্রোগ্রাম এক্সিকিউশনের সময় ঘটে যাওয়া সমস্ত বরাদ্দ/ফ্রি কল বাধা দিতেও সমর্থন করে। ব্যবহারের নির্দেশাবলীর জন্য malloc_hooks ডকুমেন্টেশন দেখুন।

Malloc পরিসংখ্যান

অ্যান্ড্রয়েড <malloc.h> -এ mallinfo(3) এবং malloc_info(3) এক্সটেনশন সমর্থন করে।

malloc_info কার্যকারিতা Android 6.0 (Marshmallow) এবং উচ্চতর সংস্করণে উপলব্ধ এবং এর XML স্কিমা Bionic-এর malloc.h হেডারে নথিভুক্ত করা হয়েছে।

প্রোফাইলিং

নেটিভ কোডের CPU প্রোফাইলিংয়ের জন্য, আপনি Simpleperf ব্যবহার করতে পারেন।