NDK में ndk-gdb नाम की एक शेल स्क्रिप्ट शामिल होती है, ताकि कमांड-लाइन नेटिव डीबगिंग सेशन शुरू किया जा सके. पहले, इस स्क्रिप्ट का नाम gdb था, लेकिन अब इसे lldb कहा जाता है.
जीयूआई का इस्तेमाल करने वाले लोगों को, Android Studio में डिबग करने के लिए दस्तावेज़ पढ़ना चाहिए.
ज़रूरी शर्तें
कमांड-लाइन नेटिव डीबगिंग की सुविधा काम करे, इसके लिए ये ज़रूरी शर्तें पूरी करनी होंगी:
ndk-buildस्क्रिप्ट का इस्तेमाल करके अपना ऐप्लिकेशन बनाएं.ndk-gdbस्क्रिप्ट, बिल्ड करने के लिए लेगसीmake APP=<name>तरीके का इस्तेमाल नहीं करती.- अपनी
AndroidManifest.xmlफ़ाइल में ऐप्लिकेशन डीबग करने की सुविधा चालू करने के लिए, ऐसा<application>एलिमेंट शामिल करें जोandroid:debuggableएट्रिब्यूट कोtrueपर सेट करता हो. - अपने ऐप्लिकेशन को Android 2.2 (Android API लेवल 8) या उसके बाद के वर्शन पर चलने के लिए बनाएं.
- Android 2.2 या इसके बाद के वर्शन पर चलने वाले डिवाइस या एमुलेटर पर डीबग करना.
डीबग करने के लिए,
AndroidManifest.xmlफ़ाइल में बताए गए टारगेट एपीआई लेवल से कोई फ़र्क़ नहीं पड़ता. - Unix शेल में अपना ऐप्लिकेशन डेवलप करें. Windows पर, Cygwin या एक्सपेरिमेंट के तौर पर उपलब्ध
ndk-gdb-pyPython का इस्तेमाल करें. - GNU Make 3.81 या इसके बाद के वर्शन का इस्तेमाल करें.
इस्तेमाल
ndk-gdb स्क्रिप्ट को शुरू करने के लिए, ऐप्लिकेशन डायरेक्ट्री या उसके नीचे मौजूद किसी डायरेक्ट्री पर जाएं. उदाहरण के लिए:
cd $PROJECT $NDK/ndk-gdb
यहां, $PROJECT आपके प्रोजेक्ट की रूट डायरेक्ट्री पर ले जाता है और $NDK आपके NDK इंस्टॉलेशन पाथ पर ले जाता है.
ndk-gdb को शुरू करने पर, यह सेशन को कॉन्फ़िगर करता है, ताकि वह आपकी जनरेट की गई नेटिव लाइब्रेरी की सोर्स फ़ाइलों और सिंबल/डीबग वर्शन को ढूंढ सके. आपके आवेदन की प्रोसेस से जुड़ने के बाद, ndk-gdb गड़बड़ी के कई मैसेज दिखाता है. इन मैसेज में बताया जाता है कि वह कई सिस्टम लाइब्रेरी नहीं ढूंढ पा रहा है. यह सामान्य है, क्योंकि आपकी होस्ट मशीन में, टारगेट डिवाइस पर इन लाइब्रेरी के सिंबल/डीबग वर्शन मौजूद नहीं होते. आपके पास इन मैसेज को अनदेखा करने का विकल्प है.
इसके बाद, ndk-gdb सामान्य lldb प्रॉम्प्ट दिखाता है.
ndk-gdb के साथ उसी तरह इंटरैक्ट किया जाता है जैसे lldb के साथ किया जाता है.
अगर आपको lldb के बारे में नहीं पता है, लेकिन gdb के बारे में पता है, तो [GDB से LLDB के लिए कमांड मैप](https://lldb.llvm.org/use/map.html) देखें.
ndk-gdb, गड़बड़ी की कई स्थितियों को मैनेज करता है. साथ ही, अगर उसे कोई समस्या मिलती है, तो गड़बड़ी के बारे में जानकारी देने वाला मैसेज दिखाता है. इन जांचों में यह पक्का करना शामिल है कि ये शर्तें पूरी की गई हों:
- यह जांच करता है कि ADB आपके पाथ में है या नहीं.
- यह जांच करता है कि आपके ऐप्लिकेशन को मेनिफ़ेस्ट में डीबग किया जा सकता है या नहीं.
- यह जांच करता है कि डिवाइस पर, एक ही पैकेज नाम वाला इंस्टॉल किया गया ऐप्लिकेशन भी डिबग किया जा सकता है या नहीं.
डिफ़ॉल्ट रूप से, ndk-gdb पहले से चल रही आवेदन की प्रोसेस खोजता है. अगर उसे कोई प्रोसेस नहीं मिलती है, तो वह गड़बड़ी का मैसेज दिखाता है. हालांकि, डीबगिंग सेशन से पहले अपनी गतिविधि को अपने-आप शुरू करने के लिए, --start या
--launch=<name> विकल्प का इस्तेमाल किया जा सकता है. ज़्यादा जानकारी के लिए, विकल्प देखें.
विकल्प
विकल्पों की पूरी सूची देखने के लिए, कमांड लाइन पर ndk-gdb --help टाइप करें. टेबल 1 में, आम तौर पर इस्तेमाल होने वाले कई फ़ंक्शन के साथ-साथ उनकी खास जानकारी दी गई है.
टेबल 1. ndk-gdb के सामान्य विकल्प और उनकी जानकारी.
इस विकल्प के साथ ndk-gdb शुरू करने पर, आपके ऐप्लिकेशन मेनिफ़ेस्ट में दी गई पहली लॉन्च की जा सकने वाली ऐक्टिविटी लॉन्च होती है. लॉन्च की जा सकने वाली अगली गतिविधि शुरू करने के लिए, --launch=<name> का इस्तेमाल करें. लॉन्च की जा सकने वाली गतिविधियों की सूची को डंप करने के लिए, कमांड लाइन से --launch-list चलाएं.
| विकल्प | ब्यौरा> |
|---|---|
--verbose |
यह विकल्प, बिल्ड सिस्टम को नेटिव-डीबगिंग सेशन के सेटअप के बारे में ज़्यादा जानकारी प्रिंट करने के लिए कहता है. यह सिर्फ़ समस्याओं को डीबग करने के लिए ज़रूरी है, जब डीबगर ऐप्लिकेशन से कनेक्ट नहीं हो पाता और |
--force |
डिफ़ॉल्ट रूप से, ndk-gdb तब बंद हो जाता है, जब उसे पता चलता है कि उसी डिवाइस पर कोई दूसरा नेटिव डीबगिंग सेशन पहले से ही चल रहा है. इस विकल्प से, मौजूदा सेशन को बंद कर दिया जाता है और उसे नए सेशन से बदल दिया जाता है.
ध्यान दें कि इस विकल्प से, डीबग किए जा रहे असली ऐप्लिकेशन को बंद नहीं किया जाता. आपको इसे अलग से बंद करना होगा. |
--start |
|
--launch=<name> |
यह विकल्प |
--launch-list |
यह सुविधाजनक विकल्प, आपके ऐप्लिकेशन मेनिफ़ेस्ट में मौजूद, लॉन्च की जा सकने वाली सभी गतिविधियों के नामों की सूची को प्रिंट करता है. |
--project=<path> |
यह विकल्प, ऐप्लिकेशन प्रोजेक्ट डायरेक्ट्री के बारे में बताता है. यह तब काम आता है, जब आपको प्रोजेक्ट डायरेक्ट्री में बदलाव किए बिना स्क्रिप्ट को लॉन्च करना हो. |
--port=<port> |
डिफ़ॉल्ट रूप से, |
--adb=<file> |
यह विकल्प, adb टूल के लिए, 'कार्रवाई करने वाला' फ़ाइल टाइप तय करता है. यह सिर्फ़ तब ज़रूरी है, जब आपने उस एक्सीक्यूटेबल को शामिल करने के लिए अपना पाथ सेट न किया हो. |
-d-e-s <serial> |
ये फ़्लैग, एक ही नाम वाले adb निर्देशों से मिलते-जुलते हैं. अगर आपकी होस्ट मशीन से कई डिवाइस या एमुलेटर कनेक्ट हैं, तो ये फ़्लैग सेट करें. इनका मतलब इस तरह है:
इसके अलावा, किसी खास डिवाइस की सूची बनाने के लिए, |
--exec=<file>-x <file> |
यह विकल्प, |
--nowait |
डीबगर के कनेक्ट होने तक, Java कोड को रोकने की सुविधा बंद करें. इस विकल्प को पास करने पर, डीबगर को शुरुआती ब्रेकपॉइंट नहीं मिल सकते. |
--tui
-t |
अगर टेक्स्ट यूज़र इंटरफ़ेस उपलब्ध है, तो उसे चालू करें. |
--gnumake-flag=<flag> |
यह विकल्प, प्रोजेक्ट की जानकारी के लिए |
ध्यान दें: इस टेबल में दिए गए आखिरी तीन विकल्प, सिर्फ़ ndk-gdb के Python वर्शन के लिए हैं.