এই পৃষ্ঠায় 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.exelldbclient.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 ডিবাগারের অ্যাটাচ হওয়ার জন্য অপেক্ষা করতে বলুন:
- সেটিংস > ডেভেলপার বিকল্প > ডিবাগ অ্যাপ বেছে নিন বিকল্পে যান এবং তালিকা থেকে আপনার অ্যাপ বেছে নিন, তারপর ডিবাগারের জন্য অপেক্ষা করুন বিকল্পে ক্লিক করুন।
- লঞ্চার থেকে অথবা কমান্ড লাইন ব্যবহার করে অ্যাপ চালু করুন:
adb shell am start -a android.intent.action.MAIN -n APP_NAME/.APP_ACTIVITY
- অ্যাপ লোড হওয়া পর্যন্ত অপেক্ষা করুন এবং একটি ডায়ালগ দেখতে পাবেন যেখানে বলা হবে যে অ্যাপটি ডিবাগার লোড হওয়ার জন্য অপেক্ষা করছে।
- সাধারণত
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 ব্যবহার করে কোড ডিবাগ করতে:
lldbclient.pyবাlldbclient.pyচালানোর জন্য প্রয়োজনীয় সব বিল্ড আর্টিফ্যাক্ট (যেমন, প্রতীক) আছে কিনা তা নিশ্চিত করুন।- VS Code-এ, কমান্ড চালানোর জন্য Ctrl+Shift+P প্রেস করুন, Debug:
Add Configuration... সার্চ করুন, তারপর LLDB বেছে নিন।
এটি একটি
launch.jsonফাইল খোলে এবং একটি তালিকায় নতুন JSON অবজেক্ট যোগ করে। - নতুন যোগ করা ডিবাগার কনফিগারেশন দুটি কমেন্ট লাইন দিয়ে পরিবর্তন করুন -
// #lldbclient-generated-beginএবং// #lldbclient-generated-end, যাতে আপনার কনফিগারেশন তালিকাটি এইরকম দেখায়:"configurations": [ // #lldbclient-generated-begin // #lldbclient-generated-end ]
lldbclient.pyএই কমেন্টগুলি ব্যবহার করে কনফিগারেশন কোথায় লিখতে হবে তা শনাক্ত করে। তালিকায় অন্য আইটেম থাকলে, অন্যান্য কনফিগারেশনের পরে কমেন্ট লাইনগুলি শেষে যোগ করুন। - টার্মিনালে নিম্নলিখিত কমান্ড রান করুন যেখানে আপনি
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ফ্ল্যাগটি উপস্থিত থাকলে সেটি অবশ্যই শেষ ফ্ল্যাগ হতে হবে । - রান ও ডিবাগ সাইড বার খুলুন - নতুন কনফিগারেশন ডিবাগার তালিকায়
দেখা যাবে। ডিবাগিং শুরু করুন (F5) বিকল্পে প্রেস করুন। ১০ থেকে ৩০ সেকেন্ড পরে
ডিবাগার কানেক্ট হওয়া উচিত।
রান ও ডিবাগ ভিউতে নতুন কনফিগারেশন দেখা না গেলে, উইন্ডো রিলোড করে ডিবাগার তালিকা রিফ্রেশ করুন - Ctrl+Shift+P প্রেস করে
reload windowটাইপ করুন। - ডিবাগিং করা হয়ে গেলে,
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"}' \
...Build নামের একটি টাস্ক চালাতে এবং
স্ক্রিপ্টের মাধ্যমে তৈরি করা ধাপগুলিতে একটি নতুন ডিবাগ ইনিশিয়ালাইজেশন ধাপ যোগ করতে সাহায্য করবে। আপনি
VS Code ডকুমেন্টেশন এবং
CodeLLDB এক্সটেনশনের ইউজার ম্যানুয়ালে উপলভ্য প্রপার্টির
ওভারভিউ দেখতে পাবেন।