एनडीके में 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
अक्सर इस्तेमाल होने वाली बहुत सारी जानकारी दिखाता है. साथ ही, कम शब्दों में दी जाने वाली जानकारी भी दिखाता है.
इस विकल्प के साथ ndk-gdb
से, सूची में दी गई पहली लॉन्च की जा सकने वाली गतिविधि लॉन्च होगी
ऐप्लिकेशन मेनिफ़ेस्ट फ़ाइल में. अगला लॉन्च शुरू करने के लिए --launch=<name>
का इस्तेमाल करें
गतिविधि. लॉन्च की जा सकने वाली गतिविधियों की सूची को डंप करने के लिए, निर्देश से --launch-list
को चलाएं
लाइन.
विकल्प | ब्यौरा> |
---|---|
--lldb |
अगर सेट हो, तो स्क्रिप्ट सेशन के लिए gdb के बजाय LLDB डीबगर का इस्तेमाल करेगी. |
--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 |
जब तक GDB कनेक्ट नहीं हो जाता, तब तक Java कोड रोकना बंद करें. इस विकल्प को पास करने से डीबगर हो सकता है ताकि शुरुआती ब्रेकपॉइंट छूट जाएं. |
--tui
-t |
अगर टेक्स्ट यूज़र इंटरफ़ेस उपलब्ध है, तो उसे चालू करें. |
--gnumake-flag=<flag> |
यह विकल्प एक अतिरिक्त फ़्लैग (या फ़्लैग) है जो
|
ध्यान दें: इस टेबल में दिए गए आखिरी तीन विकल्प, सिर्फ़
ndk-gdb
का Python वर्शन.
थ्रेड सहायता
अगर आपका ऐप्लिकेशन, Android 2.3 (एपीआई लेवल 9) से पुराने प्लैटफ़ॉर्म पर काम करता है, तो ndk-gdb
नेटिव थ्रेड को ठीक से डीबग नहीं कर सकता. डीबगर सिर्फ़ मुख्य थ्रेड को पूरी तरह डीबग कर सकता है
दूसरे थ्रेड के एक्ज़ीक्यूशन को अनदेखा कर देता है.
अगर मुख्य थ्रेड पर लागू किए गए फ़ंक्शन पर ब्रेकपॉइंट लगाया जाता है, तो प्रोग्राम बंद हो जाता है और GDB नीचे दिया गया मैसेज दिखाता है:
Program terminated with signal SIGTRAP, Trace/breakpoint trap. The program no longer exists.