Android Studio में एक डीबगर होता है. इसकी मदद से, ये काम किए जा सकते हैं. इनके अलावा, और भी काम किए जा सकते हैं:
- वह डिवाइस चुनें जिस पर आपको अपने ऐप्लिकेशन को डीबग करना है.
- अपने Java, Kotlin, और C/C++ कोड में ब्रेकपॉइंट सेट करें.
- रनटाइम के दौरान वैरिएबल की जांच करें और एक्सप्रेशन का आकलन करें.
इस पेज पर, बुनियादी डीबगर ऑपरेशन के लिए निर्देश दिए गए हैं. ज़्यादा दस्तावेज़ों के लिए, IntelliJ IDEA डीबग करने से जुड़े दस्तावेज़ भी देखें.
डीबग करने की सुविधा चालू करना
डीबग करना शुरू करने से पहले, यह काम करें:
- अपने डिवाइस पर डीबग करने की सुविधा चालू करें.
- अगर एम्युलेटर का इस्तेमाल किया जा रहा है, तो डीबगिंग की सुविधा डिफ़ॉल्ट रूप से चालू होती है. हालांकि, कनेक्ट किए गए डिवाइस के लिए, आपको डिवाइस डेवलपर के विकल्पों में डीबग करने की सुविधा चालू करनी होगी.
- डीबग किए जा सकने वाले बिल्ड वैरिएंट को चलाएं.
ऐसे बिल्ड वैरिएंट का इस्तेमाल करें जिसमें बिल्ड कॉन्फ़िगरेशन में
debuggable true
(Kotlin स्क्रिप्ट मेंisDebuggable = true
) शामिल हो.आम तौर पर, हर Android Studio प्रोजेक्ट में शामिल डिफ़ॉल्ट "debug" वैरिएंट को चुना जा सकता है. भले ही, यह
build.gradle
फ़ाइल में न दिखता हो. हालांकि, अगर आपको ऐसे नए बिल्ड टाइप तय करने हैं जिन्हें डीबग किया जा सकता है, तो आपको बिल्ड टाइप मेंdebuggable true
जोड़ना होगा:- अपने ऐप्लिकेशन के कोड में ब्रेकपॉइंट सेट करें.
- टूलबार में, टारगेट डिवाइस मेन्यू से वह डिवाइस चुनें जिस पर आपको अपने ऐप्लिकेशन को डीबग करना है.
पहली इमेज. टारगेट डिवाइस मेन्यू. अगर आपने कोई डिवाइस कॉन्फ़िगर नहीं किया है, तो आपको Android Emulator का इस्तेमाल करने के लिए, इनमें से कोई एक काम करना होगा: यूएसबी के ज़रिए कोई डिवाइस कनेक्ट करें, वाई-फ़ाई के ज़रिए कोई डिवाइस कनेक्ट करें या कोई एवीडी बनाएं.
- टूलबार में, डीबग करें
पर क्लिक करें.
अगर आपका ऐप्लिकेशन डिवाइस पर पहले से चल रहा है, तो एक डायलॉग बॉक्स दिखेगा. इसमें आपसे पूछा जाएगा कि क्या आपको रन मोड से डीबग मोड पर स्विच करना है. डीबग करने की प्रोसेस शुरू करने के लिए, डिवाइस को रीस्टार्ट करना होगा. ऐप्लिकेशन के उसी इंस्टेंस को चालू रखने के लिए, डीबग रद्द करें पर क्लिक करें. इसके बजाय, डीबगर को चालू ऐप्लिकेशन से अटैच करें. ऐसा न करने पर, Android Studio एक APK बनाता है, उसे डीबग पासकोड से साइन करता है, उसे आपके चुने हुए डिवाइस पर इंस्टॉल करता है, और उसे चालू करता है.
अगर आपने अपने प्रोजेक्ट में C और C++ कोड जोड़ा है, तो Android Studio, Debug विंडो में LLDB डीबगर भी चलाता है, ताकि आपके नेटिव कोड को डीबग किया जा सके.
- अगर डीबग विंडो खुली नहीं है, तो व्यू > टूल विंडो > डीबग चुनें
या टूल विंडो बार में डीबग करें
पर क्लिक करें.
- Attach debugger to Android process
पर क्लिक करें.
- प्रोसेस चुनें डायलॉग बॉक्स में, वह प्रोसेस चुनें जिससे आपको डीबगर अटैच करना है.
- अगर किसी एम्युलेटर या रूट किए गए डिवाइस का इस्तेमाल किया जा रहा है, तो सभी प्रोसेस देखने के लिए, सभी प्रोसेस दिखाएं पर क्लिक करें. रूट किए गए डिवाइस पर, इससे डिवाइस पर चल रही सभी प्रोसेस दिखेंगी. हालांकि, रूट नहीं किए गए डिवाइस पर, सिर्फ़ डीबग की जा सकने वाली प्रोसेस दिखेंगी.
- Android Debugger की सेटिंग का इस्तेमाल करें मेन्यू में जाकर, मौजूदा run/debug configuration को चुना जा सकता है. C और C++ कोड के लिए, इसकी मदद से, LLDB स्टार्टअप कमांड, LLDB पोस्ट-अटैच कमांड, और सिंबल डायरेक्ट्री का फिर से इस्तेमाल किया जा सकता है.
- अगर आपके पास कोई मौजूदा रन/डीबग कॉन्फ़िगरेशन नहीं है, तो नया बनाएं को चुनें. इस विकल्प को चुनने पर, डीबग टाइप मेन्यू चालू हो जाता है. यहां कोई दूसरा डीबग टाइप चुना जा सकता है. डिफ़ॉल्ट रूप से, Android Studio, 'अपने-आप पता लगाएं' डीबग टाइप का इस्तेमाल करता है. इससे, यह तय किया जाता है कि आपके प्रोजेक्ट में Java या C/C++ कोड शामिल है या नहीं. इसके आधार पर, आपके लिए सबसे अच्छा डीबगर विकल्प चुना जाता है.
- ठीक है पर क्लिक करें.
डीबग विंडो दिखेगी.
- एक्ज़ीक्यूशन और नेविगेशन टूलबार. ब्रेकपॉइंट के साथ काम करना लेख पढ़ें
- थ्रेड सिलेक्टर
- एक्सप्रेशन की जांच करना और वॉच एक्सप्रेशन डालना. वैरिएबल की जांच करना लेख पढ़ें.
- स्टैक डिसप्ले
- वैरिएबल का पैनल. वैरिएबल की जांच करना लेख पढ़ें.
- अपने-आप पता लगाने की सुविधा
- अगर आपको Android Studio को यह अनुमति देनी है कि वह डीबग किए जा रहे कोड के लिए सबसे सही विकल्प अपने-आप चुने, तो डीबग करने का यह तरीका चुनें. उदाहरण के लिए, अगर आपके प्रोजेक्ट में कोई C या C++ कोड है, तो Android Studio अपने-आप डुअल डीबग टाइप का इस्तेमाल करता है. अगर ऐसा नहीं होता है, तो Android Studio सिर्फ़ Java वाले डीबग टाइप का इस्तेमाल करता है.
- सिर्फ़ Java
- अगर आपको सिर्फ़ Java या Kotlin में लिखे गए कोड को डीबग करना है, तो इस डीबग टाइप को चुनें. Java-Only डीबगर, आपके नेटिव कोड में सेट किए गए किसी भी ब्रेकपॉइंट या वॉच को अनदेखा करता है.
- सिर्फ़ नेटिव (सिर्फ़ C/C++ कोड के साथ उपलब्ध है)
-
अगर आपको अपने कोड को डीबग करने के लिए सिर्फ़ LLDB का इस्तेमाल करना है, तो डीबग करने का यह तरीका चुनें. इस डिबग टाइप का इस्तेमाल करने पर, Java डिबगर सेशन व्यू उपलब्ध नहीं होता. डिफ़ॉल्ट रूप से,
LLDB सिर्फ़ आपके नेटिव कोड की जांच करता है और आपके Java कोड में मौजूद ब्रेकपॉइंट को अनदेखा करता है. अगर आपको अपने Java कोड को भी डीबग करना है, तो 'अपने-आप पता लगाएं' या 'दो तरह से डीबग करें' में से किसी एक को चुनें.
नेटिव डिबगिंग की सुविधा सिर्फ़ उन डिवाइसों पर काम करती है जो यहां दी गई ज़रूरी शर्तें पूरी करते हैं:
डिवाइस पर
run-as
काम करता है.यह देखने के लिए कि डिवाइस पर
run-as
काम करता है या नहीं, अपने डिवाइस से कनेक्ट किए गए ADB शेल पर यह निर्देश चलाएं:run-as your-package-name pwd
your-package-name
की जगह अपने ऐप्लिकेशन के पैकेज का नाम डालें. अगर डिवाइस मेंrun-as
की सुविधा काम करती है, तो कमांड बिना किसी गड़बड़ी के वापस आनी चाहिए.डिवाइस पर
ptrace
की सुविधा चालू हो.यह देखने के लिए कि
ptrace
चालू है या नहीं, अपने डिवाइस से कनेक्ट किए गए ADB शेल पर यह निर्देश चलाएं:sysctl kernel.yama.ptrace_scope
अगर
ptrace
चालू है, तो यह कमांड0
वैल्यू याunknown key
गड़बड़ी को प्रिंट करेगी. अगरptrace
चालू नहीं है, तो यह0
के अलावा कोई दूसरी वैल्यू प्रिंट करेगा.
- ड्यूल (Java + नेटिव) - यह सिर्फ़ C/C++ कोड के साथ उपलब्ध है
-
अगर आपको Java और नेटिव कोड, दोनों के बीच डीबग करने की सुविधा स्विच करनी है, तो डीबग करने का यह टाइप चुनें.
Android Studio, Java डिबगर और LLDB, दोनों को आपके ऐप्लिकेशन की प्रोसेस से जोड़ता है. इससे, ऐप्लिकेशन को रीस्टार्ट किए बिना या डीबग कॉन्फ़िगरेशन में बदलाव किए बिना, Java और नेटिव कोड, दोनों में ब्रेकपॉइंट की जांच की जा सकती है.
दूसरी इमेज में, डीबग विंडो के टाइटल की दाईं ओर मौजूद दो टैब देखें. ऐप्लिकेशन में Java और C++ कोड, दोनों मौजूद हैं. इसलिए, एक टैब में नेटिव कोड और दूसरे में Java कोड डीबग किया जा रहा है. -java से पता चलता है कि Java कोड डीबग किया जा रहा है.
तीसरी इमेज. नेटिव कोड को डीबग करने के लिए टैब और Java कोड को डीबग करने के लिए टैब. - लाइन ब्रेकपॉइंट
- सबसे सामान्य टाइप, लाइन ब्रेकपॉइंट होता है. यह आपके ऐप्लिकेशन के एक्ज़ीक्यूशन को कोड की तय की गई लाइन पर रोकता है. रोकने के दौरान, वैरिएबल की जांच की जा सकती है और एक्सप्रेशन का आकलन किया जा सकता है. इसके बाद, रनटाइम की गड़बड़ियों की वजहों का पता लगाने के लिए, एक-एक करके लाइनें लागू की जा सकती हैं.
- तरीके के हिसाब से ब्रेकपॉइंट
- मेथड ब्रेकपॉइंट, आपके ऐप्लिकेशन के एक्ज़ीक्यूशन को तब रोकता है, जब वह किसी खास मेथड में डालता है या उससे बाहर निकलता है. रोकने के दौरान, वैरिएबल की जांच की जा सकती है और एक्सप्रेशन का आकलन किया जा सकता है. इसके बाद, रनटाइम की गड़बड़ियों की वजहों का पता लगाने के लिए, एक-एक करके लाइनें लागू की जा सकती हैं. किसी कंपोज़ेबल फ़ंक्शन पर ब्रेकपॉइंट सेट करने पर, डीबगर कंपोज़ेबल के पैरामीटर और उनकी स्थिति की सूची दिखाता है. इससे यह पता लगाने में मदद मिलती है कि किन बदलावों की वजह से रेंडरिंग फिर से हुई है.
- फ़ील्ड ब्रेकपॉइंट
- फ़ील्ड ब्रेकपॉइंट, किसी खास फ़ील्ड से डेटा पढ़ने या उसमें डेटा लिखने के दौरान, आपके ऐप्लिकेशन के एक्ज़ीक्यूशन को रोकता है.
- अपवाद ब्रेकपॉइंट
- अपवाद ब्रेकपॉइंट, अपवाद दिखने पर आपके ऐप्लिकेशन के एक्ज़ीक्यूशन को रोकता है.
- कोड की उस लाइन पर जाएं जहां आपको एक्ज़ीक्यूशन रोकना है.
- कोड की उस लाइन के साथ मौजूद बाईं ओर के गटर पर क्लिक करें या कर्सर को लाइन पर रखें और Control+F8 (macOS पर, Command+F8) दबाएं.
- अगर आपका ऐप्लिकेशन पहले से चल रहा है, तो Attach debugger to Android process
पर क्लिक करें. अगर आपको डीबग करना है, तो डीबग करें
पर क्लिक करें.
-
किसी वैरिएबल के लिए ऑब्जेक्ट ट्री की जांच करने के लिए, उसे वैरिएबल व्यू में बड़ा करें. अगर आपको वैरिएबल व्यू नहीं दिख रहा है, तो लेआउट सेटिंग
पर क्लिक करें. इसके बाद, पक्का करें कि वैरिएबल के बगल में मौजूद बॉक्स पर सही का निशान लगा हो.
-
किसी तरीके को डाले बिना कोड की अगली लाइन पर जाने के लिए, स्टेप ओवर
पर क्लिक करें.
-
किसी तरीके के कॉल के अंदर पहली लाइन पर जाने के लिए, स्टेप इनटू
पर क्लिक करें.
-
मौजूदा तरीके से बाहर की अगली लाइन पर जाने के लिए, स्टेप आउट
पर क्लिक करें.
-
ऐप्लिकेशन को सामान्य तरीके से इस्तेमाल करना जारी रखने के लिए, प्रोग्राम फिर से शुरू करें
पर क्लिक करें.
- जब LLDB डीबगर को आपके C/C++ कोड में कोई ब्रेकपॉइंट मिलता है, तब Android Studio <your-module> टैब पर स्विच करता है. फ़्रेम, वैरिएबल, और वॉच पैन भी उपलब्ध हैं. ये ठीक उसी तरह काम करते हैं जैसे Java कोड को डीबग करते समय करते हैं.
हालांकि, LLDB सेशन व्यू में थ्रेड पैन उपलब्ध नहीं है, लेकिन फ़्रेम पैन में मौजूद सूची का इस्तेमाल करके, अपने ऐप्लिकेशन की प्रोसेस को ऐक्सेस किया जा सकता है. विंडो फ़्रेम डीबग करने और वेरिएबल की जांच करने के तरीके के बारे में ज़्यादा जानें.
ध्यान दें: आपके नेटिव कोड में ब्रेकपॉइंट की जांच करते समय, Android सिस्टम उस वर्चुअल मशीन को निलंबित कर देता है जो आपके ऐप्लिकेशन के Java बाइटकोड को चलाती है. इसका मतलब है कि नेटिव कोड में ब्रेकपॉइंट की जांच करते समय, Java डिबगर के साथ इंटरैक्ट नहीं किया जा सकता. साथ ही, Java डिबगर सेशन से किसी भी तरह की स्थिति की जानकारी नहीं पाई जा सकती.
- जब Java डीबगर को आपके Java या Kotlin कोड में कोई ब्रेकपॉइंट मिलता है, तब Android Studio <your-module>-java टैब पर स्विच हो जाता है.
- LLDB की मदद से डीबग करते समय, LLDB सेशन व्यू में LLDB टर्मिनल का इस्तेमाल किया जा सकता है. इससे LLDB को कमांड-लाइन विकल्प पास किए जा सकते हैं. अगर आपको कुछ ऐसी कमांड चाहिए जिन्हें LLDB, आपके ऐप्लिकेशन को डीबग करने के लिए हर बार इस्तेमाल करे, तो उन कमांड को अपने डीबग कॉन्फ़िगरेशन में जोड़ें. ऐसा, डीबगर के आपके ऐप्लिकेशन प्रोसेस से अटैच होने से ठीक पहले या ठीक बाद किया जा सकता है.
- देखने या दिखाने के लिए एक्सप्रेशन डालें
- एक्सप्रेशन का एक बार आकलन करने के लिए, वॉच में जोड़ें पर क्लिक करें या Enter दबाएं.
- आपके टारगेट किए गए फ़िज़िकल डिवाइस या एम्युलेटर में x86 या x86_64 सीपीयू का इस्तेमाल किया जाता है. अगर आपके डिवाइस में ARM सीपीयू का इस्तेमाल किया जाता है, तो आपको मेमोरी में अपने वैरिएबल के पते की सीमा को अलाइन करना होगा. इसके लिए, 32-बिट प्रोसेसर के लिए 4 बाइट या 64-बिट प्रोसेसर के लिए 8 बाइट का इस्तेमाल करें. अपने नेटिव कोड में किसी वैरिएबल को अलाइन करने के लिए, वैरिएबल के कम होने की दर में
__attribute__((aligned(num_bytes)))
तय करें. जैसा कि यहां दिखाया गया है:// For a 64-bit ARM processor int my_counter __attribute__((aligned(8)));
- आपने पहले ही तीन या उससे कम वॉचपॉइंट असाइन किए हों. Android Studio, x86 या x86_64 टारगेट डिवाइसों पर सिर्फ़ चार वॉचपॉइंट के साथ काम करता है. ऐसा हो सकता है कि अन्य डिवाइसों पर कम वॉचपॉइंट काम करें.
- जब आपका ऐप्लिकेशन ब्रेकपॉइंट पर निलंबित हो, तब LLDB सेशन व्यू में मौजूद वैरिएबल पैन पर जाएं.
-
उस वैरिएबल पर राइट क्लिक करें जो मेमोरी के उस ब्लॉक का इस्तेमाल करता है जिसे आपको ट्रैक करना है. इसके बाद, वॉचपॉइंट जोड़ें को चुनें.
इमेज 9. मेमोरी में मौजूद किसी वैरिएबल में वॉचपॉइंट जोड़ें. वॉचपॉइंट को कॉन्फ़िगर करने के लिए, एक डायलॉग बॉक्स दिखेगा. इसे इमेज 9 में दिखाया गया है.
इन विकल्पों की मदद से वॉचपॉइंट कॉन्फ़िगर करें:
- चालू है: अगर आपको Android Studio को यह निर्देश देना है कि जब तक सेटिंग में बदलाव न किया जाए, तब तक वॉचपॉइंट को अनदेखा किया जाए, तो इस विकल्प से सही का निशान हटाएं. Android Studio, आपके वॉचपॉइंट को सेव करता है, ताकि आप इसे बाद में ऐक्सेस कर सकें.
- निलंबित करना: डिफ़ॉल्ट रूप से, Android सिस्टम आपके ऐप्लिकेशन की प्रोसेस को तब निलंबित कर देता है, जब वह वॉचपॉइंट को असाइन की गई मेमोरी के ब्लॉक को ऐक्सेस करता है. अगर आपको यह सुविधा नहीं चाहिए, तो इस विकल्प से सही का निशान हटाएं. इससे आपको कुछ और विकल्प दिखते हैं. इनका इस्तेमाल करके, यह तय किया जा सकता है कि सिस्टम आपके वॉचपॉइंट के साथ इंटरैक्ट करते समय कैसा व्यवहार करे: कंसोल में लॉग मैसेज और हिट होने पर हटाएं.
- ऐक्सेस टाइप: चुनें कि आपका ऐप्लिकेशन, सिस्टम की ओर से वैरिएबल को असाइन किए गए मेमोरी ब्लॉक को पढ़ने या लिखने की कोशिश करने पर, वॉचपॉइंट को ट्रिगर करे या नहीं. पढ़ने या लिखने के लिए, वॉचपॉइंट ट्रिगर करने के लिए, कोई भी चुनें.
- हो गया पर क्लिक करें.
- वैरिएबल की सूची में, संसाधन की लाइन पर कहीं भी राइट क्लिक करके सूची दिखाएं.
- सूची में, इस तरह देखें को चुनें. इसके बाद, वह फ़ॉर्मैट चुनें जिसका आपको इस्तेमाल करना है.
उपलब्ध फ़ॉर्मैट, आपके चुने गए संसाधन के डेटा टाइप पर निर्भर करते हैं. आपको इनमें से एक या ज़्यादा विकल्प दिख सकते हैं:
- क्लास: क्लास की परिभाषा दिखाता है.
- toString: डिसप्ले स्ट्रिंग फ़ॉर्मैट.
- ऑब्जेक्ट: ऑब्जेक्ट (क्लास का इंस्टेंस) की परिभाषा दिखाएं.
- ऐरे: ऐरे फ़ॉर्मैट में दिखाएं.
- टाइमस्टैंप: तारीख और समय को इस तरह दिखाएं: yyyy-mm-dd hh:mm:ss.
- अपने-आप: Android Studio, डेटा टाइप के आधार पर सबसे सही फ़ॉर्मैट चुनता है.
- बाइनरी: शून्य और एक का इस्तेमाल करके बाइनरी वैल्यू दिखाएं.
- MeasureSpec: यह वैल्यू, पैरंट से चुने गए चाइल्ड को पास की जाती है.
MeasureSpec
देखें. - हेक्स: हेक्साडेसिमल वैल्यू के तौर पर दिखाएं.
- प्रिमिटिव: प्रिमिटिव डेटा टाइप का इस्तेमाल करके, इसे संख्या वाली वैल्यू के तौर पर दिखाएं.
- पूर्णांक: इसे
Integer
टाइप की संख्यात्मक वैल्यू के तौर पर दिखाएं.
- संसाधन की वैल्यू पर राइट क्लिक करें.
- इस तरह देखें को चुनें.
- बनाएं को चुनें.
- आपको Java Data Type Renderers डायलॉग दिखेगा. Java Data type renderers पर दिए गए निर्देशों का पालन करें.
Groovy
android { buildTypes { customDebugType { debuggable true ... } } }
Kotlin
android { buildTypes { create("customDebugType") { isDebuggable = true ... } } }
यह प्रॉपर्टी, C/C++ कोड वाले मॉड्यूल पर भी लागू होती है.
ध्यान दें: अब jniDebuggable
प्रॉपर्टी का इस्तेमाल नहीं किया जाता.
अगर आपका ऐप्लिकेशन किसी ऐसे लाइब्रेरी मॉड्यूल पर निर्भर करता है जिसे आपको डीबग भी करना है, तो उस लाइब्रेरी को भी debuggable true
के साथ पैकेज किया जाना चाहिए, ताकि उसके डीबग सिंबल बने रहें.
यह पक्का करने के लिए कि आपके ऐप्लिकेशन प्रोजेक्ट के डीबग किए जा सकने वाले वैरिएंट को लाइब्रेरी मॉड्यूल का डीबग किया जा सकने वाला वैरिएंट मिले, अपनी लाइब्रेरी के नॉन-डिफ़ॉल्ट वर्शन पब्लिश करें.
डीबग करना शुरू करें
डीबग सेशन इस तरह शुरू किया जा सकता है:
डीबगर को चालू ऐप्लिकेशन से अटैच करना
अगर आपका ऐप्लिकेशन पहले से ही आपके डिवाइस पर चल रहा है, तो ऐप्लिकेशन को रीस्टार्ट किए बिना डिबग करना शुरू किया जा सकता है. इसके लिए, यह तरीका अपनाएं:
डिवाइस एक्सप्लोरर (व्यू > टूल विंडो > डिवाइस एक्सप्लोरर) में मौजूद प्रोसेस टैब में, डीबग की जा सकने वाली प्रोसेस की सूची भी होती है. वहां से, कोई प्रोसेस चुनी जा सकती है. इसके बाद, उसे बंद किया जा सकता है
,
जबरन रोका जा सकता है
,
या किसी प्रोसेस से डीबगर को अटैच किया जा सकता है
.
डीबग विंडो

डीबग विंडो को
ध्यान दें: Android Studio डिबगर और गार्बेज कलेक्टर, एक-दूसरे से काफ़ी हद तक जुड़े होते हैं. Android वर्चुअल मशीन यह गारंटी देती है कि डिबगर को जिस भी ऑब्जेक्ट के बारे में पता है उसे तब तक गार्बेज इकट्ठा नहीं किया जाएगा, जब तक डिबगर डिसकनेक्ट नहीं हो जाता. इससे डीबगर के कनेक्ट होने पर, ऑब्जेक्ट की संख्या बढ़ सकती है. उदाहरण के लिए, अगर डीबगर को कोई थ्रेड दिखती है, तो उससे जुड़ा Thread
ऑब्जेक्ट तब तक गार्बेज इकट्ठा नहीं किया जाता, जब तक डीबगर डिसकनेक्ट नहीं हो जाता. भले ही, थ्रेड खत्म हो गई हो.
डीबगर का टाइप बदलना
Java/Kotlin कोड और C/C++ कोड को डीबग करने के लिए, अलग-अलग डीबगर टूल की ज़रूरत होती है. इसलिए, Android Studio डीबगर की मदद से यह चुना जा सकता है कि किस तरह के डीबगर का इस्तेमाल करना है. डिफ़ॉल्ट रूप से, Android Studio यह तय करता है कि किस डीबगर का इस्तेमाल करना है. यह फ़ैसला, वह अपने-आप पता लगाएं डीबगर टाइप का इस्तेमाल करके, आपके प्रोजेक्ट में मौजूद भाषाओं के आधार पर करता है.
डीबग कॉन्फ़िगरेशन में डीबगर को मैन्युअल तरीके से चुनने के लिए, चलाएं > कॉन्फ़िगरेशन में बदलाव करें पर क्लिक करें. Run > Attach debugger to Android process पर क्लिक करने पर दिखने वाले डायलॉग में भी, डिबगर को चुना जा सकता है.
डीबग करने के लिए ये टाइप उपलब्ध हैं:
ध्यान दें: कंपाइलर से ऑप्टिमाइज़ किए गए नेटिव कोड को डीबग करते समय, आपको यह चेतावनी वाला मैसेज मिल सकता है:This function was
compiled with optimizations enabled. Some debugger features may not be
available
. ऑप्टिमाइज़ेशन फ़्लैग का इस्तेमाल करने पर, कंपाइलर आपके कंपाइल किए गए कोड में बदलाव करता है, ताकि वह ज़्यादा असरदार तरीके से काम कर सके. इस वजह से, डीबगर ऐसी जानकारी दे सकता है जो उम्मीद के मुताबिक न हो या गलत हो. ऐसा इसलिए होता है, क्योंकि डीबगर के लिए, ऑप्टिमाइज़ किए गए कंपाइल किए गए कोड को वापस मूल सोर्स कोड पर मैप करना मुश्किल होता है.
इसलिए, आपको अपने नेटिव कोड को डीबग करते समय, कंपाइलर ऑप्टिमाइज़ेशन बंद कर देना चाहिए.
सिस्टम लॉग का इस्तेमाल करना
सिस्टम लॉग, ऐप्लिकेशन को डीबग करते समय सिस्टम मैसेज दिखाता है. इन मैसेज में, डिवाइस पर चल रहे ऐप्लिकेशन से मिली जानकारी शामिल होती है. अगर आपको अपने ऐप्लिकेशन को डीबग करने के लिए सिस्टम लॉग का इस्तेमाल करना है, तो पक्का करें कि आपका कोड लॉग मैसेज लिखता हो और ऐप्लिकेशन के डेवलपमेंट फ़ेज़ में अपवादों के लिए स्टैक ट्रेस प्रिंट करता हो.
अपने कोड में लॉग मैसेज लिखना
अपने कोड में लॉग मैसेज लिखने के लिए,
Log
क्लास का इस्तेमाल करें. लॉग मैसेज से, आपको एक्ज़ीक्यूशन फ़्लो को समझने में मदद मिलती है. इसके लिए, ये मैसेज आपके ऐप्लिकेशन से इंटरैक्ट करते समय सिस्टम के डीबग आउटपुट को इकट्ठा करते हैं. लॉग मैसेज से यह भी पता चलता है कि आपके ऐप्लिकेशन का कौन-सा हिस्सा काम नहीं कर रहा है. लॉगिंग के बारे में ज़्यादा जानने के लिए, Logcat की मदद से लॉग लिखना और देखना लेख पढ़ें.
यहां दिए गए उदाहरण में बताया गया है कि गतिविधि शुरू होने पर, पिछली स्थिति की जानकारी उपलब्ध है या नहीं, यह पता लगाने के लिए लॉग मैसेज कैसे जोड़े जा सकते हैं:
Kotlin
import android.util.Log ... class MyActivity : Activity() { ... override fun onCreate(savedInstanceState: Bundle?) { ... if (savedInstanceState != null) { Log.d(TAG, "onCreate() Restoring previous state") /* restore state */ } else { Log.d(TAG, "onCreate() No saved state available") /* initialize app */ } ... } ... companion object { private val TAG: String = MyActivity::class.java.simpleName ... } }
Java
import android.util.Log; ... public class MyActivity extends Activity { private static final String TAG = MyActivity.class.getSimpleName(); ... @Override public void onCreate(Bundle savedInstanceState) { ... if (savedInstanceState != null) { Log.d(TAG, "onCreate() Restoring previous state"); /* restore state */ } else { Log.d(TAG, "onCreate() No saved state available"); /* initialize app */ } ... } }
डेवलपमेंट के दौरान, आपका कोड अपवादों का पता लगा सकता है. साथ ही, सिस्टम लॉग में स्टैक ट्रेस लिख सकता है:
Kotlin
fun someOtherMethod() { try { ... } catch (e : SomeException) { Log.d(TAG, "someOtherMethod()", e) } }
Java
void someOtherMethod() { try { ... } catch (SomeException e) { Log.d(TAG, "someOtherMethod()", e); } }
ध्यान दें: जब आपका ऐप्लिकेशन पब्लिश करने के लिए तैयार हो जाए, तब अपने कोड से डीबग लॉग मैसेज और स्टैक ट्रेस प्रिंट कॉल हटा दें. इसके लिए, DEBUG
फ़्लैग सेट करें और डीबग लॉग मैसेज को शर्त वाले स्टेटमेंट में रखें.
सिस्टम लॉग देखना
लॉगकैट विंडो में, डीबग और अन्य सिस्टम मैसेज देखे और फ़िल्टर किए जा सकते हैं. जैसा कि इमेज 4 में दिखाया गया है. उदाहरण के लिए, आपको ये मैसेज दिख सकते हैं: कचरा इकट्ठा होने पर दिखने वाले मैसेज या Log
क्लास का इस्तेमाल करके, अपने ऐप्लिकेशन में जोड़े गए मैसेज.
Logcat का इस्तेमाल करने के लिए, डीबग करना शुरू करें और Logcat टैब चुनें.

Logcat और इसके फ़िल्टर करने के विकल्पों के बारे में जानने के लिए, Logcat की मदद से लॉग लिखें और देखें लेख पढ़ें.
ब्रेकपॉइंट के साथ काम करना
Android Studio में ऐसे ब्रेकपॉइंट इस्तेमाल किए जा सकते हैं जो डीबग करने की अलग-अलग कार्रवाइयों को ट्रिगर करते हैं. ब्रेकपॉइंट कई तरह के होते हैं:
शर्त के हिसाब से ब्रेकपॉइंट सेट किए जा सकते हैं. ये ब्रेकपॉइंट, सिर्फ़ तब एक्ज़ीक्यूशन को निलंबित करेंगे, जब कुछ खास शर्तें पूरी होंगी. लॉगिंग ब्रेकपॉइंट भी सेट किए जा सकते हैं. ये ब्रेकपॉइंट, प्रोग्राम के एक्ज़ीक्यूशन को रोके बिना Logcat में लिखते हैं. इससे आपके कोड में लॉग स्टेटमेंट को शामिल करने से बचा जा सकता है.
लाइन ब्रेकपॉइंट जोड़ने के लिए, यह तरीका अपनाएं:
ब्रेकपॉइंट सेट करने पर, लाइन के बगल में एक लाल बिंदु दिखता है. इसे पांचवीं इमेज में दिखाया गया है.

जब आपका कोड एक्ज़ीक्यूट होते समय ब्रेकपॉइंट पर पहुंचता है, तो Android Studio आपके ऐप्लिकेशन के एक्ज़ीक्यूशन को रोक देता है.
ऐप्लिकेशन की स्थिति का पता लगाने के लिए, Debugger टैब में मौजूद टूल का इस्तेमाल करें:
अगर आपके प्रोजेक्ट में किसी नेटिव कोड का इस्तेमाल किया जाता है, तो डिफ़ॉल्ट रूप से 'अपने-आप पता लगाएं' डीबग टाइप, Java डीबगर और LLDB, दोनों को आपके ऐप्लिकेशन से दो अलग-अलग प्रोसेस के तौर पर अटैच करता है. अपने ऐप्लिकेशन को रीस्टार्ट किए बिना या सेटिंग में बदलाव किए बिना, Java और C/C++ ब्रेकपॉइंट की जांच के बीच स्विच किया जा सकता है.
ध्यान दें: Android Studio को आपके C या C++ कोड में ब्रेकपॉइंट का पता लगाने के लिए, आपको ऐसे डीबग टाइप का इस्तेमाल करना होगा जो LLDB के साथ काम करता हो. जैसे, अपने-आप पता लगने वाला, नेटिव या ड्यूअल. Android Studio में इस्तेमाल किए जाने वाले डीबग टाइप को बदला जा सकता है. इसके लिए, डीबग कॉन्फ़िगरेशन में बदलाव करें. अलग-अलग तरह के डीबग के बारे में ज़्यादा जानने के लिए, अन्य डीबग टाइप इस्तेमाल करने के बारे में सेक्शन पढ़ें.
जब Android Studio, आपके ऐप्लिकेशन को टारगेट डिवाइस पर डिप्लॉय करता है, तब डिबग विंडो खुलती है. इसमें हर डिबगर प्रोसेस के लिए एक टैब या डिबग सेशन व्यू होता है. इसे इमेज 6 में दिखाया गया है.

C/C++ कोड को डीबग करते समय, खास तरह के ब्रेकपॉइंट भी सेट किए जा सकते हैं. इन्हें वॉचपॉइंट कहा जाता है. ये ब्रेकपॉइंट, आपके ऐप्लिकेशन की प्रोसेस को तब निलंबित कर सकते हैं, जब आपका ऐप्लिकेशन मेमोरी के किसी खास ब्लॉक के साथ इंटरैक्ट करता है. ज़्यादा जानने के लिए, वॉचपॉइंट जोड़ने के तरीके के बारे में सेक्शन पढ़ें.
ब्रेकपॉइंट देखना और उन्हें कॉन्फ़िगर करना
सभी ब्रेकपॉइंट देखने और ब्रेकपॉइंट सेटिंग कॉन्फ़िगर करने के लिए, डीबग विंडो में ब्रेकपॉइंट देखें
पर क्लिक करें. इसके बाद, आपको ब्रेकपॉइंट विंडो दिखेगी. यह सातवीं इमेज में दिखाई गई है.

ब्रेकपॉइंट विंडो की मदद से, पैनल में मौजूद सूची से हर ब्रेकपॉइंट को चालू या बंद किया जा सकता है. अगर कोई ब्रेकपॉइंट बंद है, तो Android Studio उस ब्रेकपॉइंट पर पहुंचने पर आपके ऐप्लिकेशन को नहीं रोकता.
सेटिंग कॉन्फ़िगर करने के लिए, सूची में से कोई ब्रेकपॉइंट चुनें. ब्रेकपॉइंट को इस तरह कॉन्फ़िगर किया जा सकता है कि वह शुरू में बंद रहे. इसके बाद, जब कोई दूसरा ब्रेकपॉइंट हिट हो, तब सिस्टम उसे चालू कर दे. यह भी कॉन्फ़िगर किया जा सकता है कि ब्रेकपॉइंट हिट होने के बाद उसे बंद करना है या नहीं. किसी भी अपवाद के लिए ब्रेकपॉइंट सेट करने के लिए, ब्रेकपॉइंट की सूची में अपवाद ब्रेकपॉइंट चुनें.
कुछ समय के लिए सभी ब्रेकपॉइंट बंद करने के लिए, डीबग विंडो में ब्रेकपॉइंट म्यूट करें
पर क्लिक करें. इसे फिर से चालू करने के लिए, दोबारा क्लिक करें.
डीबग विंडो फ़्रेम
डीबगर विंडो में, फ़्रेम पैन की मदद से उस स्टैक फ़्रेम की जांच की जा सकती है जिसकी वजह से मौजूदा ब्रेकपॉइंट हिट हुआ. इससे आपको स्टैक फ़्रेम पर जाने और उसकी जांच करने में मदद मिलती है. साथ ही, अपने Android ऐप्लिकेशन में थ्रेड की सूची की जांच करने में भी मदद मिलती है.
किसी थ्रेड को चुनने के लिए, थ्रेड सिलेक्टर मेन्यू का इस्तेमाल करें और उसका स्टैक फ़्रेम देखें. एडिटर में सोर्स खोलने के लिए, फ़्रेम में मौजूद एलिमेंट पर क्लिक करें. आपके पास थ्रेड के प्रज़ेंटेशन को पसंद के मुताबिक बनाने का विकल्प भी होता है. साथ ही, स्टैक फ़्रेम को एक्सपोर्ट किया जा सकता है. इस बारे में, फ़्रेम की जांच करने से जुड़ी गाइड में बताया गया है.
वैरिएबल की जांच करना
डीबगर विंडो में, वैरिएबल पैन की मदद से वैरिएबल की जांच की जा सकती है. ऐसा तब होता है, जब सिस्टम किसी ब्रेकपॉइंट पर आपके ऐप्लिकेशन को रोकता है और फ़्रेम पैन से कोई फ़्रेम चुना जाता है. वैरिएबल पैन की मदद से, स्टैटिक तरीकों और/या चुने गए फ़्रेम में उपलब्ध वैरिएबल का इस्तेमाल करके, ऐड हॉक एक्सप्रेशन का आकलन भी किया जा सकता है.
ऐप्लिकेशन को डीबग करते समय, ऑब्जेक्ट ट्री में कोई एक्सप्रेशन जोड़ने के लिए:

इसके अलावा, अगर ऑब्जेक्ट ट्री में वह एक्सप्रेशन मौजूद है जिसे आपको देखना है, तो उसे ट्री के सबसे ऊपर खींचकर छोड़ें. इससे वह एक्सप्रेशन, देखे जाने वाले एक्सप्रेशन के तौर पर जुड़ जाएगा.
ब्रेकपॉइंट हिट होने या कोड में एक-एक करके आगे बढ़ने पर, देखे गए एक्सप्रेशन अपडेट हो जाएंगे.
जांची गई वैल्यू, ऑब्जेक्ट ट्री में सबसे ऊपर तब तक दिखती रहेंगी, जब तक कि आप किसी दूसरी वैल्यू की जांच नहीं कर लेते या अपने कोड में आगे नहीं बढ़ जाते.
ऑब्जेक्ट ट्री से देखे गए एक्सप्रेशन को हटाने के लिए, एक्सप्रेशन पर राइट क्लिक करें. इसके बाद, Remove Watch पर क्लिक करें.
वॉचपॉइंट जोड़ना
C/C++ कोड को डीबग करते समय, खास तरह के ब्रेकपॉइंट सेट किए जा सकते हैं. इन्हें वॉचपॉइंट कहा जाता है. ये ब्रेकपॉइंट, आपके ऐप्लिकेशन के किसी खास मेमोरी ब्लॉक के साथ इंटरैक्ट करने पर, ऐप्लिकेशन की प्रोसेस को निलंबित कर सकते हैं. उदाहरण के लिए, अगर आपने मेमोरी के किसी ब्लॉक के लिए दो पॉइंटर सेट किए हैं और उस पर वॉचपॉइंट असाइन किया है, तो मेमोरी के उस ब्लॉक को ऐक्सेस करने के लिए किसी भी पॉइंटर का इस्तेमाल करने पर वॉचपॉइंट ट्रिगर हो जाएगा.
Android Studio में, रनटाइम के दौरान वॉचपॉइंट बनाया जा सकता है. इसके लिए, किसी वैरिएबल को चुनना होता है. हालांकि, LLDB वॉचपॉइंट को सिर्फ़ उस मेमोरी ब्लॉक को असाइन करता है जिसे सिस्टम उस वैरिएबल के लिए असाइन करता है, न कि वैरिएबल को. यह, वॉचेज़ पैन में वैरिएबल जोड़ने से अलग है. इससे आपको किसी वैरिएबल की वैल्यू देखने की सुविधा मिलती है. हालांकि, जब सिस्टम मेमोरी में उसकी वैल्यू को पढ़ता है या बदलता है, तब यह आपको अपने ऐप्लिकेशन की प्रोसेस को निलंबित करने की अनुमति नहीं देता.
ध्यान दें: जब आपका ऐप्लिकेशन प्रोसेस किसी फ़ंक्शन से बाहर निकल जाती है और सिस्टम, मेमोरी से उसके लोकल वैरिएबल को हटा देता है, तो आपको उन वैरिएबल के लिए बनाए गए किसी भी वॉचपॉइंट को फिर से असाइन करना होगा.
वॉचपॉइंट सेट करने के लिए, आपको ये ज़रूरी शर्तें पूरी करनी होंगी:
ध्यान दें: 32-बिट ARM ABI के साथ अपने ऐप्लिकेशन को डीबग करते समय, वॉचपॉइंट जोड़ने या कोड में मौजूद वैरिएबल पर कर्सर घुमाने से, ऐप्लिकेशन क्रैश हो सकता है. ऐसा इसलिए होता है, ताकि उनकी वैल्यू की जांच की जा सके. इस समस्या को हल करने के लिए, 64-बिट ARM, x86 या x86_64 बाइनरी का इस्तेमाल करके डीबग करें. इस समस्या को Android Studio के आने वाले वर्शन में ठीक कर दिया जाएगा.
ज़रूरी शर्तें पूरी करने पर, वॉचपॉइंट को इस तरह जोड़ा जा सकता है:
अपने सभी वॉचपॉइंट देखने और वॉचपॉइंट की सेटिंग कॉन्फ़िगर करने के लिए, डीबग विंडो में ब्रेकपॉइंट देखें
पर क्लिक करें. इसके बाद, आपको ब्रेकपॉइंट डायलॉग दिखेगा. यह डायलॉग, इमेज 10 में दिखाया गया है.

वॉचपॉइंट जोड़ने के बाद, अपने ऐप्लिकेशन की प्रोसेस को फिर से शुरू करने के लिए, डीबग विंडो में प्रोग्राम फिर से शुरू करें
पर क्लिक करें. डिफ़ॉल्ट रूप से, अगर आपका ऐप्लिकेशन मेमोरी के उस ब्लॉक को ऐक्सेस करने की कोशिश करता है जिसके लिए आपने वॉचपॉइंट सेट किया है, तो Android सिस्टम आपके ऐप्लिकेशन की प्रोसेस को निलंबित कर देता है. साथ ही, वॉचपॉइंट आइकॉन
, कोड की उस लाइन के बगल में दिखता है जिसे आपके ऐप्लिकेशन ने आखिरी बार एक्ज़ीक्यूट किया था. इसे इमेज 11 में दिखाया गया है.

संसाधन की वैल्यू दिखाने का फ़ॉर्मैट देखना और बदलना
डीबग मोड में, रिसॉर्स वैल्यू देखी जा सकती हैं. साथ ही, Java या Kotlin कोड में मौजूद वैरिएबल के लिए, डिसप्ले फ़ॉर्मैट चुना जा सकता है. वेरिएबल टैब दिखने पर और कोई फ़्रेम चुने जाने पर, यह तरीका अपनाएं:
कस्टम फ़ॉर्मैट बनाने के लिए, यह तरीका अपनाएं: