একটি কমান্ড-লাইন নেটিভ ডিবাগিং সেশন শুরু করতে NDK-এ ndk-gdb
নামে একটি শেল স্ক্রিপ্ট অন্তর্ভুক্ত রয়েছে। যে ব্যবহারকারীরা একটি GUI ব্যবহার করতে পছন্দ করেন তাদের পরিবর্তে Android স্টুডিওতে ডিবাগ করার জন্য ডকুমেন্টেশন পড়া উচিত।
প্রয়োজনীয়তা
কমান্ড-লাইন নেটিভ ডিবাগিং কাজ করার জন্য, এই প্রয়োজনীয়তাগুলি অবশ্যই পূরণ করতে হবে:
-
ndk-build
স্ক্রিপ্ট ব্যবহার করে আপনার অ্যাপ তৈরি করুন।ndk-gdb
স্ক্রিপ্ট তৈরি করতে লিগ্যাসিmake APP=<name>
পদ্ধতি ব্যবহার করে সমর্থন করে না। - আপনার
AndroidManifest.xml
ফাইলে একটি<application>
উপাদান অন্তর্ভুক্ত করে অ্যাপ ডিবাগিং সক্ষম করুন যাandroid:debuggable
বৈশিষ্ট্যটিকেtrue
এ সেট করে। - Android 2.2 (Android API লেভেল 8) বা তার উপরে চালানোর জন্য আপনার অ্যাপ তৈরি করুন।
- Android 2.2 বা উচ্চতর সংস্করণে চলমান একটি ডিভাইস বা এমুলেটরে ডিবাগ করুন৷ ডিবাগিং উদ্দেশ্যে, আপনি আপনার
AndroidManifest.xml
ফাইলে যে টার্গেট API লেভেল ঘোষণা করেন তা কোন ব্যাপার না। - একটি ইউনিক্স শেলে আপনার অ্যাপ ডেভেলপ করুন। Windows এ, Cygwin বা পরীক্ষামূলক
ndk-gdb-py
পাইথন বাস্তবায়ন ব্যবহার করুন। - GNU Make 3.81 বা উচ্চতর ব্যবহার করুন।
ব্যবহার
ndk-gdb
স্ক্রিপ্ট চালু করতে, অ্যাপ্লিকেশন ডিরেক্টরি বা এটির অধীনে যেকোন ডিরেক্টরিতে পরিবর্তন করুন। যেমন:
cd $PROJECT $NDK/ndk-gdb
এখানে, $PROJECT
আপনার প্রোজেক্টের রুট ডিরেক্টরির দিকে নির্দেশ করে এবং $NDK
আপনার NDK ইনস্টলেশন পাথকে নির্দেশ করে।
আপনি যখন ndk-gdb
চালু করেন, তখন এটি আপনার উৎস ফাইল এবং আপনার জেনারেট করা নেটিভ লাইব্রেরির প্রতীক/ডিবাগ সংস্করণগুলি দেখার জন্য সেশনটিকে কনফিগার করে। আপনার আবেদন প্রক্রিয়ার সাথে সফলভাবে সংযুক্ত হওয়ার পরে, ndk-gdb
ত্রুটি বার্তার একটি দীর্ঘ সিরিজ আউটপুট করে, উল্লেখ্য যে এটি বিভিন্ন সিস্টেম লাইব্রেরি খুঁজে পায় না। এটি স্বাভাবিক, কারণ আপনার হোস্ট মেশিনে আপনার লক্ষ্য ডিভাইসে এই লাইব্রেরির প্রতীক/ডিবাগ সংস্করণ নেই। আপনি নিরাপদে এই বার্তা উপেক্ষা করতে পারেন.
পরবর্তীতে, ndk-gdb
একটি সাধারণ GDB প্রম্পট প্রদর্শন করে।
আপনি ndk-gdb
এর সাথে একইভাবে ইন্টারঅ্যাক্ট করেন যেভাবে আপনি GNU GDB এর সাথে করবেন। উদাহরণস্বরূপ, আপনি ব্রেকপয়েন্ট সেট করতে b <location>
ব্যবহার করতে পারেন, এবং c
("চালিয়ে যান" এর জন্য) এক্সিকিউশন পুনরায় শুরু করতে। কমান্ডের একটি বিস্তৃত তালিকার জন্য, GDB ম্যানুয়াল দেখুন। আপনি যদি LLDB ডিবাগার ব্যবহার করতে পছন্দ করেন, ndk-gdb
স্ক্রিপ্ট ব্যবহার করার সময় --lldb
বিকল্পটি ব্যবহার করুন।
মনে রাখবেন যে আপনি যখন GDB প্রম্পট থেকে প্রস্থান করেন, আপনি যে আবেদন প্রক্রিয়াটি ডিবাগ করছেন তা বন্ধ হয়ে যায়। এই আচরণ একটি gdb সীমাবদ্ধতা.
ndk-gdb
অনেক ত্রুটি শর্ত পরিচালনা করে, এবং যদি এটি একটি সমস্যা খুঁজে পায় তবে একটি তথ্যপূর্ণ ত্রুটি বার্তা প্রদর্শন করে। এই চেকগুলির মধ্যে নিম্নলিখিত শর্তগুলি সন্তুষ্ট হয়েছে তা নিশ্চিত করা অন্তর্ভুক্ত:
- ADB আপনার পথে আছে কিনা তা পরীক্ষা করে।
- আপনার অ্যাপ্লিকেশনটি এর ম্যানিফেস্টে ডিবাগযোগ্য ঘোষণা করা হয়েছে কিনা তা পরীক্ষা করে।
- চেক করে যে, ডিভাইসে, একই প্যাকেজের নামের সাথে ইনস্টল করা অ্যাপ্লিকেশনটিও ডিবাগযোগ্য।
ডিফল্টরূপে, ndk-gdb
একটি ইতিমধ্যে চলমান অ্যাপ্লিকেশন প্রক্রিয়ার জন্য অনুসন্ধান করে, এবং এটি একটি খুঁজে না পেলে একটি ত্রুটি প্রদর্শন করে৷ তবে, আপনি ডিবাগিং সেশনের আগে স্বয়ংক্রিয়ভাবে আপনার কার্যকলাপ শুরু করতে --start
বা --launch=<name>
বিকল্পটি ব্যবহার করতে পারেন। আরও তথ্যের জন্য, বিকল্পগুলি দেখুন।
অপশন
বিকল্পগুলির একটি সম্পূর্ণ তালিকা দেখতে, কমান্ড লাইনে ndk-gdb --help
টাইপ করুন। সারণী 1 সংক্ষিপ্ত বিবরণ সহ আরও সাধারণভাবে ব্যবহৃত অনেকগুলি দেখায়।
অপশন | বর্ণনা> |
---|---|
--lldb | সেট করা থাকলে, স্ক্রিপ্টটি সেশনের জন্য Gdb-এর পরিবর্তে LLDB ডিবাগার ব্যবহার করবে। |
--verbose | এই বিকল্পটি বিল্ড সিস্টেমকে নেটিভ-ডিবাগিং সেশন সেটআপ সম্পর্কে ভার্বোস তথ্য মুদ্রণ করতে বলে। এটি শুধুমাত্র ডিবাগিং সমস্যার জন্য প্রয়োজনীয় যখন ডিবাগার অ্যাপের সাথে সংযোগ করতে পারে না এবং |
--force | ডিফল্টরূপে, ndk-gdb বাতিল করে যদি এটি দেখতে পায় যে একই ডিভাইসে ইতিমধ্যেই অন্য একটি নেটিভ ডিবাগিং সেশন চলছে। এই বিকল্পটি অন্য অধিবেশনকে মেরে ফেলে এবং এটিকে একটি নতুন দিয়ে প্রতিস্থাপন করে। মনে রাখবেন যে এই বিকল্পটি ডিবাগ করা প্রকৃত অ্যাপটিকে মেরে ফেলবে না, যা আপনাকে অবশ্যই আলাদাভাবে হত্যা করতে হবে। |
--start | আপনি যখন |
--launch=<name> | এই বিকল্পটি |
--launch-list | এই সুবিধার বিকল্পটি আপনার অ্যাপ ম্যানিফেস্টে পাওয়া সমস্ত লঞ্চযোগ্য কার্যকলাপের নামের তালিকা প্রিন্ট করে। |
--project=<path> | এই বিকল্পটি অ্যাপ প্রকল্প ডিরেক্টরি নির্দিষ্ট করে। আপনি যদি প্রথমে প্রকল্প ডিরেক্টরিতে পরিবর্তন না করে স্ক্রিপ্টটি চালু করতে চান তবে এটি কার্যকর। |
--port=<port> | ডিফল্টরূপে, |
--adb=<file> | এই বিকল্পটি অ্যাডবি টুল এক্সিকিউটেবল নির্দিষ্ট করে। এটি শুধুমাত্র প্রয়োজনীয় যদি আপনি সেই এক্সিকিউটেবল অন্তর্ভুক্ত করার জন্য আপনার পথ সেট না করেন। |
-d -e -s <serial> | এই পতাকাগুলি একই নামের সাথে adb কমান্ডের অনুরূপ। আপনার হোস্ট মেশিনের সাথে সংযুক্ত একাধিক ডিভাইস বা এমুলেটর থাকলে এই পতাকাগুলি সেট করুন৷ তাদের অর্থ নিম্নরূপ:
বিকল্পভাবে, আপনি একটি নির্দিষ্ট বিকল্পের প্রয়োজন ছাড়াই একটি নির্দিষ্ট ডিভাইস তালিকাভুক্ত করতে |
--exec=<file> -x <file> | এই বিকল্পটি |
--nowait | GDB সংযোগ না হওয়া পর্যন্ত জাভা কোড পজ করা অক্ষম করুন। এই বিকল্পটি পাস করার ফলে ডিবাগার প্রাথমিক ব্রেকপয়েন্ট মিস করতে পারে। |
--tui -t | টেক্সট ইউজার ইন্টারফেস সক্ষম করুন যদি এটি উপলব্ধ থাকে। |
--gnumake-flag=<flag> | এই বিকল্পটি একটি অতিরিক্ত পতাকা (বা পতাকা) যা |
দ্রষ্টব্য: এই টেবিলের চূড়ান্ত তিনটি বিকল্প শুধুমাত্র ndk-gdb
এর পাইথন সংস্করণের জন্য।
থ্রেড সমর্থন
যদি আপনার অ্যাপটি Android 2.3 (API লেভেল 9) এর চেয়ে পুরানো প্ল্যাটফর্মে চলে তবে ndk-gdb
নেটিভ থ্রেডগুলি সঠিকভাবে ডিবাগ করতে পারে না। ডিবাগার শুধুমাত্র প্রধান থ্রেড ডিবাগ করতে পারে, abd সম্পূর্ণরূপে অন্যান্য থ্রেডের সম্পাদন উপেক্ষা করে।
আপনি যদি একটি নন-মেইন থ্রেডে কার্যকর করা একটি ফাংশনে একটি ব্রেকপয়েন্ট স্থাপন করেন, তাহলে প্রোগ্রামটি প্রস্থান করে এবং GDB নিম্নলিখিত বার্তাটি প্রদর্শন করে:
Program terminated with signal SIGTRAP, Trace/breakpoint trap. The program no longer exists.