প্ল্যাটফর্ম কোড ডিবাগ করা

Android Studio for Platform (ASfP) Debug টুল উইন্ডোতে অ্যাটাচ ট্যাবের আশেপাশে মাল্টি-ল্যাঙ্গুয়েজ প্ল্যাটফর্ম ডিবাগিং ইন্টিগ্রেট করে:

  • Java ডিবাগার, নেটিভ ডিবাগার (বান্ডেল করা LLDB) অথবা দু'টিই কোনও ফিজিক্যাল ডিভাইস বা Cuttlefish ভার্চুয়াল ডিভাইসে রান করা অ্যাপ বা সিস্টেম প্রসেসে অ্যাটাচ করতে, রান করুন > Android প্রসেসে অ্যাটাচ করুন (Control+Alt+A) বিকল্প বেছে নিন।
  • অ্যাটাচ করার আগে, লোড করা প্রতিটি শেয়ার করা লাইব্রেরি (.so) এবং এর আট-ক্যারেক্টারের ELF বিল্ড আইডি লাইব্রেরি প্যানেলে—চেকমার্ক আইকন সহ, যা out/target/product/<device>/symbols-এর অধীনে ম্যাচ করা লোকাল ডিবাগ সিম্বল যাচাই করে—ভাল করে দেখে নিন।
  • টুলবার থেকে ডিভাইসের পূর্বশর্ত ম্যানেজ করুন: সিস্টেম প্রসেস দেখাও বিকল্প দিয়ে ফিল্টার করুন, adb root রান করাতে রুট করা ডিভাইস বিকল্পে ক্লিক করুন (অ্যাক্টিভ থাকলে ডিভাইস রুট করা আছে দেখাবে) এবং userdebug বিল্ডে JDWP চালু করতে JDWP চালু করুন বিকল্পে ক্লিক করুন।
  • কন্ডিশনাল ও ব্যতিক্রম ব্রেকপয়েন্ট সেট করুন, এডিটরে ইনলাইন ভেরিয়েবল ভ্যালু দেখুন, ড্রপ ফ্রেম ও স্মার্ট স্টেপ ইনটু ব্যবহার করুন এবং রানটাইমে স্ট্রাকচার্ড C++ ও Rust টাইপ পরীক্ষা করুন।

ডিবাগার ব্যবহার করার আগে, আপনার lunch টার্গেট বিল্ড করুন যাতে লোকাল out/target/product/<device>/symbols/.build-id সিম্বল ইনডেক্স থাকে এবং ম্যাচিং ডিভাইস ইমেজ ফ্ল্যাশ বা লঞ্চ করুন।

Java এবং ডুয়াল Java ও নেটিভ ডিবাগিং

Java বা Kotlin অ্যাপ্লিকেশন, সিস্টেম অ্যাপ (যেমন com.android.messaging, সেটিংস বা SystemUI) অথবা JNI এবং C++ বা Rust কোডে কল করা প্রসেস ডিবাগ করতে, নিম্নলিখিত ধাপগুলি সম্পূর্ণ করুন:

  1. আপনার Java, Kotlin, C, C++ বা Rust সোর্স ফাইলে ব্রেকপয়েন্ট সেট করুন।
  2. রান করুন > Android প্রসেসে অ্যাটাচ করুন (Control+Alt+A) বিকল্প বেছে নিন। ASfP, Debug টুল উইন্ডোর মধ্যে একটি পিন করা অ্যাটাচ করুন ট্যাব খোলে।
  3. ডিভাইস ড্রপ-ডাউন মেনু থেকে আপনার টার্গেট ডিভাইস বেছে নিন। userdebug বিল্ডে JDWP চালু করা না থাকলে, JDWP চালু করুন বিকল্পে ক্লিক করুন—ASfP persist.debug.dalvik.vm.jdwp.enabled=1 সেট করে ডিভাইসটি রিবুট করে। চালু করা থাকলে, বোতামটি JDWP চালু করা আছে হিসেবে দেখায় এবং রাইট-ক্লিক করলে JDWP বন্ধ করুন অ্যাকশন দেখা যায়।
  4. টেবিল থেকে টার্গেট প্রসেস বেছে নিন (Java ও ART প্রসেসে কফি-কাপ আইকন দেখানো হয়)।
  5. অ্যাটাচ করুন ট্যাবের নিচে, Java ডিবাগার, নেটিভ ডিবাগার অথবা দু'টিই বেছে নিন। দুটিই বেছে নিলে Debug টুল উইন্ডোতে দুটি লিঙ্ক করা ট্যাব খুলবে: <process> (<pid>) বিল্ট-ইন LLDB-এর জন্য এবং <process> (<pid>)-jdwp Java-এর জন্য। দুটি সেশনের লাইফসাইকেল একে অপরের সাথে যুক্ত, তাই যেকোনও একটি সেশন বন্ধ করলে দুটিই বন্ধ হয়ে যায়।
  6. অ্যাটাচ করুন বিকল্পে ক্লিক করুন এবং আপনার ডিভাইসে অ্যাপের সাথে ইন্টার‍্যাক্ট করে ব্রেকপয়েন্টে পৌঁছান।

অ্যাটাচ ট্যাবের পাশে লিঙ্ক করা ডুয়াল Java ও নেটিভ ডিবাগিং ট্যাব

সিস্টেম প্রসেস (C এবং C++) ডিবাগিং ও প্রতীক যাচাইকরণ

সিস্টেম ডেমোন, HAL বা সিস্টেম পরিষেবা (যেমন android.hardware.bluetooth-service.cuttlefish, surfaceflinger বা audioserver) ডিবাগ করতে, নিম্নলিখিত ধাপগুলি সম্পূর্ণ করুন:

  1. রান > Android প্রসেসে অ্যাটাচ করুন (Control+Alt+A) বিকল্প খুলুন। টুলবারে রুট করা ডিভাইস দেখালে, ASfP রান করাতে adb root এবং ডিভাইস রুট করা আছে দেখাতে সেটিতে ক্লিক করুন।
  2. সবচেয়ে উপরের টুলবারে সিস্টেম প্রসেস দেখুন বিকল্প বেছে নিন এবং আপনার টার্গেট প্রসেসের জন্য ফিল্টার করুন।
  3. লাইব্রেরি প্যানেলে লোকাল ডিবাগ সিম্বল যাচাই করুন: কোনও প্রসেস বেছে নিলে লাইব্রেরি টেবিলে প্রসেসে লোড করা প্রতিটি ELF শেয়ার করা লাইব্রেরি (.so) এবং এর ELF-এর প্রথম আটটি হেক্সাডেসিমেল অক্ষর বিল্ড আইডি অটো-ফিল হয়ে যায়। ASfP প্রতিটি বিল্ড আইডিকে out/target/product/<device>/symbols (symbols/.build-id হল APEX-এর মধ্যে লাইব্রেরি সমাধান করার জন্য প্রয়োজনীয়):
    • যাচাই করা লাইব্রেরিতে চেকমার্ক আইকন দেখানো হয়। সমাধান করা হয়েছে এমন যেকোনও সারিতে পয়েন্টার নিয়ে যান সেটির সম্পূর্ণ লোকাল .debug প্রতীক পাথ প্রিভিউ করতে।
    • ম্যাচিং লোকাল প্রতীক না থাকা সমাধান না হওয়া লাইব্রেরি একটি সতর্কতা আইকন দেখায়।
  4. নন-জাভা প্রসেস শনাক্তকরণ: আপনি কোনও C++ বা Rust প্রসেস বেছে নিলে (ষড়ভুজ C আইকন দিয়ে চিহ্নিত করা হয়), ASfP জাভা ডিবাগার লুকিয়ে দেয় এবং নেটিভ ডিবাগার চেক করা অবস্থায় রেখে জাভা ডিবাগিং উপলভ্য নেই, এটি জাভা প্রসেস নয় মেসেজ দেখায়।
  5. আপনার C, C++ বা Rust সোর্স ফাইলে ব্রেকপয়েন্ট সেট করুন, অ্যাটাচ করুন বিকল্পে ক্লিক করুন এবং ডিভাইসে কোড পাথ ট্রিগার করুন।

লাইব্রেরি টেবিল, ELF বিল্ড আইডি ও লোকাল সিম্বল চেকমার্ক দেখানো অ্যাটাচ ট্যাব

Rust কোড ডিবাগ করা

ASfP, C ও C++-এর জন্য ব্যবহৃত একই বিল্ট-ইন LLDB ডিবাগার দিয়ে Rust প্ল্যাটফর্ম কোড ডিবাগ করে। কোনও এক্সটার্নাল অ্যাডাপ্টার বা ম্যানুয়াল সার্ভার সেট-আপের প্রয়োজন নেই: ASfP, এর বান্ডেল করা টুলচেন থেকে lldb-dap ব্যবহার করে এবং আপনার AOSP প্রি-বিল্ট থেকে Rust প্রিটি-প্রিন্টার অটোমেটিক লোড করে, যাতে String, Vec, HashMap ও Option-এর মতো স্ট্যান্ডার্ড টাইপ ভেরিয়েবল প্যানেলে স্ট্রাকচার করা ভ্যালু দেখাতে পারে।

ডিভাইসে চলমান Rust প্রসেসে অ্যাটাচ করা

সিস্টেম প্রসেস (C এবং C++) ডিবাগিং-এ উল্লেখ করা ধাপগুলি অনুসরণ করুন: রান করুন > Android প্রসেসে অ্যাটাচ করুন বিকল্প খুলুন, ডিভাইস রুট করা আছে এবং লোকাল সিম্বল যাচাই করুন, লাইব্রেরি প্যানেলে একটি চেকমার্ক দেখা যাবে, নেটিভ ডিবাগার বিকল্পে টিকচিহ্ন দিন এবং অ্যাটাচ করুন বিকল্পে ক্লিক করুন। একই ডিবাগ সেশনে Rust এবং C বা C++ স্ট্যাক ফ্রেম একসাথে দেখা যায়।

rust_test বা rust_test_host মডিউল ডিবাগ করা

  1. rust_test বা rust_test_host টার্গেট ঘোষণা করা Android.bp ফাইলটি খুলুন এবং মডিউল টাইপের পাশে গটারে থাকা রান আইকনে ক্লিক করুন।
  2. '<ModuleName>' ডিবাগ করুন বিকল্প বেছে নিন। ASfP টার্গেট তৈরি করে, আপনার হোস্ট মেশিন বা কানেক্ট করা ডিভাইসে LLDB-এর অধীনে টেস্ট বাইনারি লঞ্চ করে এবং আপনার Rust ব্রেকপয়েন্টে পজ করে।
  3. কোনও একটি টেস্ট ফাংশন ডিবাগ করতে বা LLDB স্টার্ট-আপ কমান্ড কাস্টমাইজ করতে, রান করুন > কনফিগারেশন এডিট করুন বিকল্প খুলুন, জেনারেট করা Soong টেস্ট কনফিগারেশন বেছে নিন এবং মেথড সেট করুন অথবা ডিবাগার বিকল্প বড় করুন। Soong Test কনফিগারেশন বিকল্প সম্পর্কে আরও জানতে, atest-এর মাধ্যমে টেস্ট প্ল্যাটফর্ম কোড দেখুন।

ASfP-তে স্ট্রাকচার্ড ভেরিয়েবল ভিজুয়ালাইজার ব্যবহার করে Rust প্ল্যাটফর্ম কোড ডিবাগ করা