OS ডেভেলপমেন্টের জন্য LLDB বা GDB ব্যবহার করে এই পৃষ্ঠার বিবরণ। অ্যাপ ডেভেলপমেন্টের জন্য, পরিবর্তে আপনার অ্যাপ ডিবাগ দেখুন, যা ব্যাখ্যা করে কিভাবে অ্যান্ড্রয়েড স্টুডিও জিইউআই ব্যবহার করতে হয় (এলএলডিবি-র উপর ভিত্তি করে)।
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
gdbclient.py --port 5038 -r /data/local/tmp/test.exe
চলমান অ্যাপ বা প্রক্রিয়া ডিবাগ করা
একটি চলমান অ্যাপ বা নেটিভ ডেমনের সাথে সংযোগ করতে, একটি PID সহ gdbclient.py
ব্যবহার করুন৷ উদাহরণস্বরূপ, PID 1234 দিয়ে প্রক্রিয়াটি ডিবাগ করতে, হোস্টে এটি চালান:
gdbclient.py -p 1234
স্ক্রিপ্টটি পোর্ট ফরওয়ার্ডিং সেট আপ করে, ডিভাইসে উপযুক্ত রিমোট ডিবাগিং স্টাব শুরু করে, হোস্টে ডিবাগার শুরু করে, চিহ্নগুলি খুঁজে পেতে এটি কনফিগার করে এবং এটিকে দূরবর্তী ডিবাগিং স্টাবের সাথে সংযুক্ত করে।
নেটিভ প্রসেস স্টার্টআপ ডিবাগিং
একটি প্রক্রিয়া শুরু হওয়ার সাথে সাথে ডিবাগ করতে, -r
বিকল্পের সাথে gdbclient.py
ব্যবহার করুন। উদাহরণস্বরূপ, ls /bin
ডিবাগ করতে, হোস্টে এটি চালান:
gdbclient.py -r /system/bin/ls /bin
তারপর, ডিবাগারের প্রম্পটে continue
প্রবেশ করুন।
ডিবাগিং অ্যাপ স্টার্টআপ
কখনও কখনও আপনি একটি অ্যাপ্লিকেশন শুরু হওয়ার সাথে সাথে ডিবাগ করতে চান, যেমন যখন একটি ক্র্যাশ হয় এবং আপনি ক্র্যাশের আগে কী ঘটেছে তা দেখতে কোডের মাধ্যমে যেতে চান৷ কিছু ক্ষেত্রে সংযুক্ত করা কাজ করে, কিন্তু অন্যান্য ক্ষেত্রে অসম্ভব কারণ আপনি সংযুক্ত করার আগেই অ্যাপটি ক্র্যাশ হয়ে যায়। logwrapper
পদ্ধতি ( strace
এর জন্য ব্যবহৃত) সর্বদা কাজ করে না কারণ অ্যাপটির কাছে পোর্ট খোলার অনুমতি নাও থাকতে পারে এবং gdbserver
সেই সীমাবদ্ধতাটি উত্তরাধিকার সূত্রে পায়।
অ্যাপ স্টার্টআপ ডিবাগ করতে, একটি জাভা ডিবাগার সংযুক্ত করার জন্য অ্যাপটিকে অপেক্ষা করতে নির্দেশ দিতে সেটিংসে বিকাশকারী বিকল্পগুলি ব্যবহার করুন:
- সেটিংস > বিকাশকারী বিকল্পগুলিতে যান > ডিবাগ অ্যাপ নির্বাচন করুন এবং তালিকা থেকে আপনার অ্যাপ চয়ন করুন, তারপর ডিবাগারের জন্য অপেক্ষা করুন ক্লিক করুন।
- অ্যাপটি শুরু করুন, হয় লঞ্চার থেকে বা চালানোর জন্য কমান্ড লাইন ব্যবহার করে:
adb shell am start -a android.intent.action.MAIN -n APP_NAME/.APP_ACTIVITY
- অ্যাপটি লোড হওয়ার জন্য অপেক্ষা করুন এবং একটি ডায়ালগ প্রদর্শিত হবে যা আপনাকে বলে যে অ্যাপটি একটি ডিবাগারের জন্য অপেক্ষা করছে।
- সাধারণত
gdbserver
/gdbclient
সংযুক্ত করুন, ব্রেকপয়েন্ট সেট করুন, তারপর প্রক্রিয়াটি চালিয়ে যান।
অ্যাপটি চালানোর জন্য, একটি জাভা ডিবাগ ওয়্যার প্রোটোকল (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
logcat-এ কপি এবং পেস্ট নির্দেশাবলী প্রদান করে যা দেখায় কিভাবে ডিবাগারকে ক্র্যাশ প্রক্রিয়ার সাথে সংযুক্ত করতে হয়।
চিহ্ন ছাড়াই ডিবাগিং
32-বিট এআরএম-এর জন্য, যদি আপনার কাছে চিহ্ন না থাকে, gdb
নির্ধারণ করতে পারে না কোন নির্দেশনা সেটটি বিচ্ছিন্ন করা হচ্ছে (ARM বা থাম্ব)। প্রতীক তথ্য অনুপস্থিত থাকাকালীন ডিফল্ট হিসাবে নির্বাচিত নির্দেশ সেট নির্দিষ্ট করতে, নিম্নলিখিত বৈশিষ্ট্য সেট করুন:
set arm fallback-mode arm # or thumb
VS কোড দিয়ে ডিবাগিং
LLDB ভিজ্যুয়াল স্টুডিও কোডে ডিবাগিং প্ল্যাটফর্ম কোড সমর্থন করে। ডিভাইসে চলমান নেটিভ কোড নিয়ন্ত্রণ এবং ডিবাগ করতে আপনি LLDB CLI ইন্টারফেসের পরিবর্তে VS কোড ডিবাগার ফ্রন্টএন্ড ব্যবহার করতে পারেন।
ডিবাগিংয়ের জন্য VS কোড ব্যবহার করার আগে, CodeLLDB এক্সটেনশনটি ইনস্টল করুন।
VS কোড ব্যবহার করে কোড ডিবাগ করতে:
-
gdbclient.py
বাlldbclient.py
চালানোর জন্য প্রয়োজনীয় সমস্ত বিল্ড আর্টিফ্যাক্ট (যেমন প্রতীক) উপস্থিত রয়েছে তা নিশ্চিত করুন। - VS কোডে, একটি কমান্ড চালানোর জন্য Ctrl+Shift+P টিপুন, ডিবাগ অনুসন্ধান করুন: কনফিগারেশন যোগ করুন... , তারপর 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) টিপুন। ডিবাগার 10 থেকে 30 সেকেন্ড পরে সংযোগ করা উচিত।
নতুন কনফিগারেশন রান এবং ডিবাগ ভিউতে উপস্থিত না হলে, ডিবাগার তালিকা রিফ্রেশ করতে উইন্ডোটি পুনরায় লোড করুন - Ctrl+Shift+P টিপুন এবং
reload window
টাইপ করুন। - আপনার ডিবাগিং শেষ হলে,
lldbclient.py
চলমান টার্মিনালে যান এবংlldbclient.py
প্রোগ্রামটি শেষ করতে এন্টার টিপুন। স্ক্রিপ্টের পরবর্তী রানগুলি#lldbclient-generated
মন্তব্যগুলির মধ্যে কনফিগারেশন তৈরি করবে এবং পুরানো বিষয়বস্তুগুলি প্রতিস্থাপন করবে, আপনাকে সেগুলি ম্যানুয়ালি সরানোর দরকার নেই৷
উৎপন্ন লঞ্চ কনফিগারেশনে কাস্টম বৈশিষ্ট্য যোগ করতে, আপনি --vscode-launch-props
পতাকা ব্যবহার করতে পারেন। উদাহরণ স্বরূপ:
lldbclient.py --setup-forwarding vscode-lldb \
--vscode-launch-props \
'{"initCommands" : ["script print(\"Hello\")"], "preLaunchTask" : "Build"}' \
...
উদাহরণের বৈশিষ্ট্যগুলি VS কোডকে ডিবাগ করার আগে Build
নামে একটি টাস্ক চালাতে বাধ্য করবে এবং স্ক্রিপ্ট দ্বারা উত্পন্ন পদক্ষেপগুলিতে একটি নতুন ডিবাগ ইনিশিয়ালাইজেশন ধাপ যুক্ত করবে। আপনি VS কোড ডকুমেন্টেশনে এবং CodeLLDB এক্সটেনশনের ব্যবহারকারী ম্যানুয়াল-এ উপলব্ধ বৈশিষ্ট্যগুলির একটি ওভারভিউ খুঁজে পেতে পারেন।