ডিবাগার ব্যবহার করা

এই পৃষ্ঠায় OS ডেভেলপমেন্টের জন্য LLDB ব্যবহারের বিবরণ দেওয়া আছে। অ্যাপ ডেভেলপমেন্টের জন্য, আপনার অ্যাপ ডিবাগ করুন দেখুন, যেখানে Android Studio GUI (LLDB-এর উপর ভিত্তি করে) কীভাবে ব্যবহার করতে হয় তা ব্যাখ্যা করা হয়েছে।

GDB আর কাজ করে না বা প্রদান করা হয় না। আপনি GDB থেকে LLDB-তে পরিবর্তন করলে, আপনাকে সম্ভবত LLDB টিউটোরিয়াল পড়ে শুরু করতে হবে। আপনি যদি একজন বিশেষজ্ঞ GDB ব্যবহারকারী হন, তাহলে ট্রানজিশন করার সময় GDB থেকে LLDB কমান্ড ম্যাপ খুব সহায়ক।

পূর্বশর্ত

ডিবাগার ব্যবহার করতে:

  • সাধারণ envsetup.sh কমান্ডের মাধ্যমে বিল্ড এনভায়রনমেন্ট সেট-আপ করুন।
  • বিল্ডিং তৈরি করার সময় আপনি যে lunch কমান্ড ব্যবহার করেছিলেন সেটিই চালান। মনে রাখবেন, লঞ্চ আইটেমটি আপনি যে ডিভাইসটি ডিবাগ করছেন তার সাথে হুবহু মিলতে হবে। অ্যাটাচ করা ডিভাইসের সাথে লাঞ্চ আইটেম না মিললে, আপনি এই ধরনের সমস্যা দেখতে পাবেন: You used the wrong lunch: TARGET_PRODUCT (aosp_arm64) does not match attached device (xyzabc)
  • আপনার ডিভাইস মেশিনের সাথে কানেক্ট করুন।

আপনার এনভায়রনমেন্ট সেট-আপ করার ব্যাপারে আরও সাহায্য পেতে, এনভায়রনমেন্ট সেট-আপ করুন দেখুন।

বাইনারি ডিবাগ করা

আপনার মেশিনে তৈরি করা কোনও বাইনারি ডিবাগ করতে, প্রথমে আপনাকে বাইনারিটি ডিভাইসে কপি করতে হবে এবং তারপরে ডিবাগার লঞ্চ করতে হবে। যেমন:

adb push test.exe /data/local/tmp/test.exe
lldbclient.py --port 5038 -r /data/local/tmp/test.exe

চালু থাকা অ্যাপ বা প্রসেস ডিবাগ করা

চলমান অ্যাপ বা নেটিভ ডেমনের সাথে কানেক্ট করতে, PID সহ lldbclient.py ব্যবহার করুন। যেমন, PID 1234-এর সাথে প্রসেস ডিবাগ করতে, হোস্টে এটি রান করুন:

lldbclient.py -p 1234

স্ক্রিপ্ট পোর্ট ফরওয়ার্ডিং সেট-আপ করে, ডিভাইসে উপযুক্ত রিমোট ডিবাগিং স্টাব চালু করে, হোস্ট মেশিনে ডিবাগার চালু করে, সিম্বল খুঁজে পাওয়ার জন্য এটি কনফিগার করে এবং রিমোট ডিবাগিং স্টাবের সাথে এটি কানেক্ট করে।

নেটিভ প্রসেস স্টার্টআপ ডিবাগ করুন

কোনও প্রসেস শুরু হওয়ার সাথে সাথেই সেটি ডিবাগ করতে, -r বিকল্পের সাথে lldbclient.py ব্যবহার করুন। যেমন, ls /bin ডিবাগ করতে, হোস্ট মেশিনে এটি রান করান:

lldbclient.py -r /system/bin/ls /bin

তারপর, ডিবাগারের প্রম্পটে continue লিখুন।

অ্যাপ স্টার্ট-আপ ডিবাগ করা

কখনও কখনও আপনি কোনও অ্যাপ চালু হওয়ার সময় ডিবাগ করতে চান, যেমন ক্র্যাশ হওয়ার সময় এবং ক্র্যাশ হওয়ার আগে কী ঘটেছে তা দেখার জন্য আপনি কোডের মাধ্যমে ধাপে ধাপে যেতে চান। কিছু ক্ষেত্রে অ্যাটাচ করা কাজ করে, কিন্তু অন্যান্য ক্ষেত্রে অসম্ভব কারণ আপনি অ্যাটাচ করার আগেই অ্যাপ ক্র্যাশ করে। logwrapper পদ্ধতি (strace-এর জন্য ব্যবহৃত) সবসময় কাজ করে না, কারণ অ্যাপের কাছে পোর্ট খোলার অনুমতি নাও থাকতে পারে এবং lldbserver সেই বিধিনিষেধ উত্তরাধিকার সূত্রে পায়।

অ্যাপ স্টার্ট-আপ ডিবাগ করতে, সেটিংসের ডেভেলপার বিকল্প ব্যবহার করে অ্যাপকে Java ডিবাগারের অ্যাটাচ হওয়ার জন্য অপেক্ষা করতে বলুন:

  1. সেটিংস > ডেভেলপার বিকল্প > ডিবাগ অ্যাপ বেছে নিন বিকল্পে যান এবং তালিকা থেকে আপনার অ্যাপ বেছে নিন, তারপর ডিবাগারের জন্য অপেক্ষা করুন বিকল্পে ক্লিক করুন।
  2. লঞ্চার থেকে অথবা কমান্ড লাইন ব্যবহার করে অ্যাপ চালু করুন:
    adb shell am start -a android.intent.action.MAIN -n APP_NAME/.APP_ACTIVITY
    
  3. অ্যাপ লোড হওয়া পর্যন্ত অপেক্ষা করুন এবং একটি ডায়ালগ দেখতে পাবেন যেখানে বলা হবে যে অ্যাপটি ডিবাগার লোড হওয়ার জন্য অপেক্ষা করছে।
  4. সাধারণত lldbserver/lldbclient অ্যাটাচ করুন, ব্রেকপয়েন্ট সেট করুন, তারপর প্রসেস চালিয়ে যান।

অ্যাপটি চলতে দেওয়ার জন্য, Java Debug Wire Protocol (JDWP) ডিবাগার অ্যাটাচ করুন, যেমন Java Debugger (jdb):

adb forward tcp:12345 jdwp:XXX  # (Where XXX is the PID
of the debugged process.)
jdb -attach localhost:12345

ক্র্যাশ করা অ্যাপ বা প্রসেস ডিবাগ করা

আপনি যদিdebuggerd ক্র্যাশ করা প্রসেস সাসপেন্ড করতে চান যাতে আপনি একটি ডিবাগার অ্যাটাচ করতে পারেন, তাহলে উপযুক্ত প্রপার্টি সেট করুন:

  • Android 11-এর পরে
    adb shell setprop debug.debuggerd.wait_for_debugger true
    
  • Android 11 ও তার আগের যেকোনও ভার্সন
    adb shell setprop debug.debuggerd.wait_for_gdb true
    
  • Android 6.0 Marshmallow ও তার আগের যেকোনও ভার্সন
    adb shell setprop debug.db.uid 999999
    

সাধারণ ক্র্যাশ আউটপুটের শেষে, debuggerd কপি ও পেস্ট করার নির্দেশাবলী লগক্যাটে প্রদান করে, যা দেখায় যে ক্র্যাশ হওয়া প্রসেসের সাথে ডিবাগার কীভাবে কানেক্ট করতে হয়।

VS Code-এর মাধ্যমে ডিবাগ করুন

LLDB, Visual Studio Code-এ প্ল্যাটফর্ম কোড ডিবাগ করার সুবিধা দেয়। ডিভাইসে রান করা নেটিভ কোড কন্ট্রোল ও ডিবাগ করার জন্য আপনি LLDB CLI ইন্টারফেসের পরিবর্তে VS Code ডিবাগার ফ্রন্টএন্ড ব্যবহার করতে পারবেন।

ডিবাগ করার জন্য VS Code ব্যবহার করার আগে, CodeLLDB এক্সটেনশন ইনস্টল করুন।

VS Code ব্যবহার করে কোড ডিবাগ করতে:

  1. lldbclient.py বা lldbclient.py চালানোর জন্য প্রয়োজনীয় সব বিল্ড আর্টিফ্যাক্ট (যেমন, প্রতীক) আছে কিনা তা নিশ্চিত করুন।
  2. VS Code-এ, কমান্ড চালানোর জন্য Ctrl+Shift+P প্রেস করুন, Debug: Add Configuration... সার্চ করুন, তারপর LLDB বেছে নিন। এটি একটি launch.json ফাইল খোলে এবং একটি তালিকায় নতুন JSON অবজেক্ট যোগ করে।
  3. নতুন যোগ করা ডিবাগার কনফিগারেশন দুটি কমেন্ট লাইন দিয়ে পরিবর্তন করুন - // #lldbclient-generated-begin এবং // #lldbclient-generated-end, যাতে আপনার কনফিগারেশন তালিকাটি এইরকম দেখায়:
    "configurations": [
        // #lldbclient-generated-begin
        // #lldbclient-generated-end
    ]

    lldbclient.py এই কমেন্টগুলি ব্যবহার করে কনফিগারেশন কোথায় লিখতে হবে তা শনাক্ত করে। তালিকায় অন্য আইটেম থাকলে, অন্যান্য কনফিগারেশনের পরে কমেন্ট লাইনগুলি শেষে যোগ করুন।

  4. টার্মিনালে নিম্নলিখিত কমান্ড রান করুন যেখানে আপনি envsetup.sh এবং lunch রান করেছেন:
    lldbclient.py --setup-forwarding vscode-lldb \
          --vscode-launch-file LAUNCH_JSON_PATH \
          ANY_OTHER_FLAGS -p pid | -n proc-name | -r ...

    lldbclient.py জেনারেট করা কনফিগারেশন launch.json-এ লেখে এবং চালানো চালিয়ে যায়। এটি প্রত্যাশিত; lldbclient.py প্রোগ্রাম বন্ধ করবেন না। আপনি --vscode-launch-file বাদ দিলে, স্ক্রিপ্টটি JSON স্নিপেট প্রিন্ট করবে যা আপনাকে launch.json-এ ম্যানুয়ালি কপি ও পেস্ট করতে হবে।

    টুল যেভাবে ফ্ল্যাগ পার্স করে তার জন্য -r ফ্ল্যাগটি উপস্থিত থাকলে সেটি অবশ্যই শেষ ফ্ল্যাগ হতে হবে ।

  5. রান ও ডিবাগ সাইড বার খুলুন - নতুন কনফিগারেশন ডিবাগার তালিকায় দেখা যাবে। ডিবাগিং শুরু করুন (F5) বিকল্পে প্রেস করুন। ১০ থেকে ৩০ সেকেন্ড পরে ডিবাগার কানেক্ট হওয়া উচিত।

    রান ও ডিবাগ ভিউতে নতুন কনফিগারেশন দেখা না গেলে, উইন্ডো রিলোড করে ডিবাগার তালিকা রিফ্রেশ করুন - Ctrl+Shift+P প্রেস করে reload window টাইপ করুন।

  6. ডিবাগিং করা হয়ে গেলে, lldbclient.py রান করা টার্মিনালে যান এবং lldbclient.py প্রোগ্রাম শেষ করতে Enter প্রেস করুন। স্ক্রিপ্টটি পরবর্তীকালে রান করালে, #lldbclient-generated কমেন্টের মধ্যে কনফিগারেশন জেনারেট হবে এবং পুরনো কন্টেন্ট পাল্টে যাবে, আপনাকে ম্যানুয়ালি সেগুলি সরাতে হবে না।

জেনারেট করা লঞ্চ কনফিগে কাস্টম প্রপার্টি যোগ করতে, আপনি --vscode-launch-props ফ্ল্যাগ ব্যবহার করতে পারবেন। যেমন:

lldbclient.py --setup-forwarding vscode-lldb \
    --vscode-launch-props \
    '{"initCommands" : ["script print(\"Hello\")"], "preLaunchTask" : "Build"}' \
    ...
এইসব প্রপার্টির উদাহরণ VS Code-কে ডিবাগ করার আগে Build নামের একটি টাস্ক চালাতে এবং স্ক্রিপ্টের মাধ্যমে তৈরি করা ধাপগুলিতে একটি নতুন ডিবাগ ইনিশিয়ালাইজেশন ধাপ যোগ করতে সাহায্য করবে। আপনি VS Code ডকুমেন্টেশন এবং CodeLLDB এক্সটেনশনের ইউজার ম্যানুয়ালে উপলভ্য প্রপার্টির ওভারভিউ দেখতে পাবেন।