एनडीके-जीडीबी

एनडीके में ndk-gdb नाम की शेल स्क्रिप्ट शामिल होती है. इसकी मदद से कमांड-लाइन नेटिव डीबगिंग सेशन. जो उपयोगकर्ता जीयूआई का इस्तेमाल करना चाहते हैं उन्हें डीबग करने में मदद करने के लिए दस्तावेज़ पढ़ें Android Studio का इस्तेमाल करें.

ज़रूरी शर्तें

कमांड-लाइन नेटिव डीबगिंग के काम करने के लिए, इन शर्तों को पूरा करना ज़रूरी है:

  • ndk-build स्क्रिप्ट का इस्तेमाल करके अपना ऐप्लिकेशन बनाएं. ndk-gdb स्क्रिप्ट बनाने के लिए लेगसी make APP=<name> तरीके का इस्तेमाल करने की सुविधा नहीं है.
  • यह विकल्प शामिल करके, अपनी AndroidManifest.xml फ़ाइल में ऐप्लिकेशन डीबग करने की सुविधा चालू करें <application> एलिमेंट, जो android:debuggable एट्रिब्यूट को true पर सेट करता है.
  • Android 2.2 (Android एपीआई लेवल 8) या इसके बाद वाले वर्शन पर चलने के लिए अपना ऐप्लिकेशन बनाएं.
  • Android 2.2 या इसके बाद वाले वर्शन पर चलने वाले डिवाइस या एम्युलेटर पर डीबग करें. डीबग करने के लिए, टारगेट आपने अपनी AndroidManifest.xml फ़ाइल में जिस एपीआई लेवल का एलान किया है उससे इस पर कोई असर नहीं पड़ता.
  • अपने ऐप्लिकेशन को Unix शेल में डेवलप करें. Windows पर, Cygwin का इस्तेमाल करें या प्रयोग के तौर पर शुरू किया गया ndk-gdb-py Python लागू करना.
  • 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 स्क्रिप्ट को शुरू करते समय.

ध्यान दें कि GDB प्रॉम्प्ट को बंद करने पर, डीबग करने की ऐप्लिकेशन प्रोसेस रुक जाती है. यह व्यवहार एक gdb सीमा है.

ndk-gdb कई गड़बड़ी स्थितियों को हैंडल करता है और अगर यह गड़बड़ी की जानकारी देने वाला मैसेज दिखाता है, तो कोई समस्या मिलती है. इन जांचों में, यह पक्का करना शामिल होता है कि नीचे दी गई शर्तें पूरी होती हैं या नहीं:

  • यह जांचता है कि ADB आपके पाथ में है.
  • यह जांच करता है कि आपके ऐप्लिकेशन को उसके मेनिफ़ेस्ट में डीबग करने लायक बताया गया है.
  • यह जांच करता है कि डिवाइस पर, इसी पैकेज नाम से इंस्टॉल किया गया ऐप्लिकेशन भी डीबग किया जा सकता है.

डिफ़ॉल्ट रूप से, ndk-gdb पहले से चल रही ऐप्लिकेशन प्रोसेस को खोजता है और कोई गड़बड़ी नहीं मिलती है. हालांकि, --start या डीबग करने से पहले आपकी गतिविधि अपने-आप शुरू होने के लिए --launch=<name> विकल्प सत्र. ज़्यादा जानकारी के लिए, विकल्प देखें.

विकल्प

विकल्पों की पूरी सूची देखने के लिए, कमांड लाइन में ndk-gdb --help टाइप करें. टेबल 1 अक्सर इस्तेमाल होने वाली बहुत सारी जानकारी दिखाता है. साथ ही, कम शब्दों में दी जाने वाली जानकारी भी दिखाता है.

टेबल 1. ndk-gdb के सामान्य विकल्प और उनकी जानकारी.

इस विकल्प के साथ ndk-gdb से, सूची में दी गई पहली लॉन्च की जा सकने वाली गतिविधि लॉन्च होगी ऐप्लिकेशन मेनिफ़ेस्ट फ़ाइल में. अगला लॉन्च शुरू करने के लिए --launch=<name> का इस्तेमाल करें गतिविधि. लॉन्च की जा सकने वाली गतिविधियों की सूची को डंप करने के लिए, निर्देश से --launch-list को चलाएं लाइन.

विकल्प ब्यौरा>
--lldb

अगर सेट हो, तो स्क्रिप्ट सेशन के लिए gdb के बजाय LLDB डीबगर का इस्तेमाल करेगी.

--verbose

यह विकल्प बिल्ड सिस्टम को नेटिव-डीबगिंग के बारे में ज़्यादा जानकारी देने वाली जानकारी प्रिंट करने के लिए कहता है सत्र सेटअप. समस्याओं को डीबग करने के लिए यह सिर्फ़ तब ज़रूरी है, जब डीबगर और ndk-gdb के दिखने वाले गड़बड़ी के मैसेज काफ़ी नहीं हैं.

--force अगर यह पता चलता है कि कोई दूसरा नेटिव डीबगिंग सेशन पहले से मौजूद है, तो डिफ़ॉल्ट रूप से ndk-gdb इसे रद्द कर देता है एक ही डिवाइस पर चलाया जा रहा है. यह विकल्प दूसरे सत्र को खत्म कर देता है और उसे एक नए सत्र से बदल देता है. ध्यान दें कि यह विकल्प, डीबग किए जा रहे असल ऐप्लिकेशन को नहीं रोकता है और आपको इसे रोकना ही होगा अलग करना होगा.
--start

ndk-gdb शुरू करने पर, यह डिफ़ॉल्ट रूप से टारगेट डिवाइस पर आपका ऐप्लिकेशन. --start का इस्तेमाल करके, यह डिफ़ॉल्ट तरीका बदला जा सकता है डीबगिंग सेशन से पहले, टारगेट डिवाइस पर ऐप्लिकेशन को साफ़ तौर पर लॉन्च करें.

--launch=<name>

यह विकल्प --start से मिलता-जुलता है. हालांकि, इससे आपको सिर्फ़ एक विकल्प चुनने की सुविधा मिलती है आपके ऐप्लिकेशन की गतिविधि. यह सुविधा सिर्फ़ तब काम करती है, जब आपका मेनिफ़ेस्ट एक से ज़्यादा लॉन्च की जा सकने वाली गतिविधियां.

--launch-list

यह सुविधा विकल्प, आपके ऐप्लिकेशन मेनिफ़ेस्ट फ़ाइल खोलें. --start में गतिविधि का पहला नाम इस्तेमाल होता है.

--project=<path> यह विकल्प, ऐप्लिकेशन प्रोजेक्ट डायरेक्ट्री के बारे में बताता है. यह तब उपयोगी होता है, जब आपको स्क्रिप्ट को प्रोजेक्ट डायरेक्ट्री में बदलने की ज़रूरत नहीं है.
--port=<port>

डिफ़ॉल्ट रूप से, ndk-gdb अपने ऐप्लिकेशन से कनेक्ट करने के लिए, लोकल टीसीपी पोर्ट 5039 का इस्तेमाल करता है टारगेट डिवाइस पर डीबग कर रहा है. किसी दूसरे पोर्ट का इस्तेमाल करने से, प्रोग्राम को नेटिव तौर पर डीबग करने की सुविधा मिलती है एक ही होस्ट मशीन से कनेक्ट किए गए अलग-अलग डिवाइसों या एम्युलेटर पर काम कर रहे हों.

--adb=<file>

यह विकल्प adb को तय करता है एक्ज़ीक्यूट किया जा सकता है. यह सिर्फ़ तब ज़रूरी है, जब आपने एक्ज़ीक्यूटेबल को शामिल करने के लिए पाथ सेट न किया हो.

  • -d
  • -e
  • -s <serial>
  • ये फ़्लैग, एक जैसे नाम वाले adb कमांड से मिलते-जुलते हैं. अगर आपके पास ये फ़्लैग सेट हैं, तो आपकी होस्ट मशीन से कनेक्ट किए गए कई डिवाइस या एम्युलेटर. इनके मतलब इस तरह हैं:

    -d
    एक डिवाइस से कनेक्ट करें.
    -e
    एक एम्युलेटर डिवाइस से कनेक्ट करें.
    -s <serial>
    किसी खास डिवाइस या एम्युलेटर से कनेक्ट करें. यहां डिवाइस का नाम <serial> है जैसा कि adb devices निर्देश में बताया गया है.

    इसके अलावा, किसी खास इवेंट को लिस्ट करने के लिए, ADB_SERIAL एनवायरमेंट वैरिएबल को तय किया जा सकता है किसी खास विकल्प की ज़रूरत नहीं है.

  • --exec=<file>
  • -x <file>
  • यह विकल्प, ndk-gdb को GDB शुरू करने के निर्देश चलाने के लिए कहता है. ये निर्देश यहां मिले होते हैं <file> को प्रोसेस से कनेक्ट करने के बाद, कोड को डीबग करने की प्रोसेस जारी रहेगी. यह एक उपयोगी सुविधा है, अगर आपको बार-बार कोई काम करना हो, जैसे कि ब्रेकपॉइंट की सूची सेट अप करना और फिर से शुरू करना लागू करता है.

    --nowait

    जब तक GDB कनेक्ट नहीं हो जाता, तब तक Java कोड रोकना बंद करें. इस विकल्प को पास करने से डीबगर हो सकता है ताकि शुरुआती ब्रेकपॉइंट छूट जाएं.

    --tui -t

    अगर टेक्स्ट यूज़र इंटरफ़ेस उपलब्ध है, तो उसे चालू करें.

    --gnumake-flag=<flag>

    यह विकल्प एक अतिरिक्त फ़्लैग (या फ़्लैग) है जो ndk-build सिस्टम जब प्रोजेक्ट की जानकारी के लिए क्वेरी करना. इस विकल्प के एक से ज़्यादा इंस्टेंस का इस्तेमाल यहां किया जा सकता है: एक ही निर्देश दिया जाएगा.

    ध्यान दें: इस टेबल में दिए गए आखिरी तीन विकल्प, सिर्फ़ ndk-gdb का Python वर्शन.

    थ्रेड सहायता

    अगर आपका ऐप्लिकेशन, Android 2.3 (एपीआई लेवल 9) से पुराने प्लैटफ़ॉर्म पर काम करता है, तो ndk-gdb नेटिव थ्रेड को ठीक से डीबग नहीं कर सकता. डीबगर सिर्फ़ मुख्य थ्रेड को पूरी तरह डीबग कर सकता है दूसरे थ्रेड के एक्ज़ीक्यूशन को अनदेखा कर देता है.

    अगर मुख्य थ्रेड पर लागू किए गए फ़ंक्शन पर ब्रेकपॉइंट लगाया जाता है, तो प्रोग्राम बंद हो जाता है और GDB नीचे दिया गया मैसेज दिखाता है:

    Program terminated with signal SIGTRAP, Trace/breakpoint trap.
          The program no longer exists.