डीबगिंग के लिए ब्रेकपॉइंट का उपयोग कैसे करें


9

ब्रेकप्वाइंट यह देखने का एक शानदार तरीका है कि कंपाइलर आपके कोड पर कैसे चलता है। अब मेरा प्रश्न यह है कि क्या आपके कोड को डीबग करने पर ब्रेकप्वाइंट का उपयोग करने की संभावना है?

जवाबों:


9

जैसा कि माजेंको के जवाब में बताया गया है, Arduino IDE ब्रेकपॉइंट तंत्र प्रदान नहीं करता है, लेकिन Atmel स्टूडियो ब्रेकप्वाइंट का समर्थन करता है

हालांकि, अगर आपके पास एक स्विच और एक एलईडी है, तो आप अपने प्रोग्राम की प्रगति को इस तरह से ट्रैक कर सकते हैं जो ब्रेकप्वाइंट के कुछ लाभ प्रदान करता है। आप एक सबरूटीन जोड़ेंगे, कह सकते हैं BPReport()कि सीरियल आउटपुट या एलसीडी के माध्यम से क्रिटिकल वैरिएबल के मानों को बदल देता है, फिर एलईडी को रोशनी देता है और तब तक इंतजार करता है जब तक कि स्विच को दबाया और जारी नहीं किया जाता है, बहस के साथ। अपनी BPReport()दिनचर्या को कॉल करें जहां भी आप बिना शर्त ब्रेकपॉइंट चाहते हैं। सशर्त ब्रेकपॉइंट के लिए, आपके पास एक रूटीन हो सकता है BPReportIf(cond)जो कॉल करता है BPReport()यदि condयह सच है। यदि आप धारावाहिक के माध्यम से आउटपुट नहीं करना चाहते हैं, तो आप कई एल ई डी या एक एलसीडी का उपयोग कर सकते हैं, और यदि आप बाहरी ब्रेक नियंत्रण चाहते हैं तो आप कई स्विच का उपयोग कर सकते हैं (उदाहरण के लिए, condअतिरिक्त स्विच में से एक का परीक्षण हो सकता है)।

[*] कुछ हार्डवेयर डीबगर्स डाउनलोड किए गए कोड को संशोधित करते हैं हर बार ब्रेकप्वाइंट को जोड़ा, बदला या हटाया जाता है। यह उपयोग फ्लैश मेमोरी को कभी-कभी डाउनलोड करने की तुलना में अधिक तेज़ी से बाहर करेगा। यदि इस तरह के डिबगिंग के लिए एक चिप का भारी उपयोग किया गया है, तो उस चिप का उत्पादन प्रणाली में उपयोग न करें।


4

हालांकि माजेंको उनका जवाब सही है लेकिन कुछ अन्य विकल्प हैं।

जैसा कि मैं कहता हूँ कि वास्तविक हार्डवेयर डिबगिंग में मैज़ेंको द्वारा कहा गया है:

  1. वास्तविक IDE स्थापित करें और उसका उपयोग करें, जैसे Atmel Studio या arduino ग्रहण प्लगइन जिसे sloeber (मैं लेखक) कहा जाता हूं;)
  2. एक पूर्ण हार्डवेयर डीबगर या हार्डवेयर का उपयोग करें जो कि बोर्ड पर है जैसे Arduio शून्य या अन्य डीबगिंग तकनीक का उपयोग करते हुए हार्डवेयर जैसे ESP8266 जो USB डीबगिंग की अनुमति देता है

पूरी तरह से अलग श्रेणी का एक अन्य डिबगिंग विकल्प आपके कोड को व्यवस्थित करना है ताकि निर्णय तर्क (हार्डवेयर स्वतंत्र) और कार्रवाई (हार्डवेयर निर्भर) पूरी तरह से अलग हो जाए।

फिर एक स्थानीय कार्यक्रम के रूप में अपने स्केच को संकलित करें और अपने स्थानीय मशीन पर "निर्णय तर्क" को डिबग करें। यह विधि "हार्डवेयर डिबगिंग" की अनुमति नहीं देती है। यह विधि इकाई परीक्षण को भी सक्षम बनाती है।

ध्यान दें कि आपकी स्थानीय मशीन संभवतः एक 32 या 64 कड़वी है और सबसे Arduino के 8 बिटर्स हैं, जिसके परिणामस्वरूप डेटा प्रकारों में अंतर होगा जो इस पद्धति का उपयोग करते समय एक अतिरिक्त ध्यान देने वाला बिंदु है।


4

Arduino-डीबग पुस्तकालय Arduino नमूने के लिए एक सरल पर लक्ष्य डिबगर प्रदान करता है। डिबग कमांड को सीधे स्केच में जोड़ा जाता है। एक डिबगर कमांड शेल को ब्रेक-पॉइंट और दावे पर शुरू किया जाता है।

यहां छवि विवरण दर्ज करें

ऊपर दिए गए स्क्रीन-शॉट एक Arduino Mega पर उदाहरण स्केच रन को दिखाता है, जो अनुप्रयोग द्वारा उपयोग किए जाने वाले सीरियल आउटपुट मॉनिटर और डीबगर शेल के लिए उपयोग किया जाने वाला Serial1 है।

स्केच डिबग कमांड

  • ASSERT (cond) चेक की स्थिति पर ध्यान दें। यदि गलत डिबग शेल कहा जाता है। स्केच जारी नहीं रह सकता।
  • BREAKPOINT () डीबग शेल कहा जाता है।
  • BREAK_IF (cond) डिबग शेल को कहा जाता है यदि स्थिति सत्य है।
  • CHECK_STACK (कमरा) जांचें कि स्टैक पर कमरा (बाइट्स) है। यदि गलत डिबग शेल कहा जाता है।
  • DEBUG_STREAM (देव) डिबग सत्र के लिए दिए गए स्ट्रीम डिवाइस का उपयोग करें। आमतौर पर सीरियल।
  • OBSERVE (expr) एक्सप्रेशन को डीबग स्ट्रीम में प्रिंट करें।
  • OBSERVE_IF (cond, expr) स्थिति सही होने पर एक्सप्रेशन को डीबग स्ट्रीम में प्रिंट करें।
  • REGISTER (var) डीबग शेल से एक्सेस के लिए एक चर रजिस्टर करें। डिबग शेल कमांड्स

डिबग शेल कमांड्स

  • VARIABLE प्रिंट चर पता और मूल्य।
  • @VARIABLE पॉइंटर पॉवर्ड वेरिएबल एड्रेस और रेफरेंस वैल्यू।
  • बैकट्रेस प्रिंट सरल कॉल-स्टैक।
  • आदेशों की सूची प्रिंट करें (सहायता भी देखें)।
  • डेटा डेटा क्षेत्र की प्रिंट सामग्री, यानी वैश्विक चर।
  • जाने छोड़ दो डिबग खोल और स्केच के निष्पादन जारी है।
  • हीप प्रिंट सामग्री के ढेर, यानी गतिशील आवंटित डेटा।
  • आदेशों की प्रिंट सूची में मदद करें।
  • मेमोरी प्रिंट मेमोरी स्टेटस।
  • स्टॉप स्केच छोड़ें
  • स्टैक के स्टैक प्रिंट सामग्री, यानी कॉल फ्रेम, तर्क, वापसी पते।
  • चर , पंजीकृत चर की प्रिंट सूची।
  • जहां प्रिंट स्रोत कोड फ़ाइल और लाइन जहां डिबग शेल कहा जाता था।

सभी डीबग शेल कमांड्स को सिंगल कैरेक्टर कमांड्स के लिए संक्षिप्त किया जा सकता है। कृपया अधिक जानकारी के लिए README देखें; स्थापना विवरण, उदाहरण स्केच और बेंचमार्किंग।


1
Mikael की दान की गई लाइब्रेरी आपको एक ब्रेकपॉइंट पर सशर्त ब्रेकपॉइंट, प्रिंट वैरिएबल के मान, मेमोरी स्टेटस, कॉल ट्रैस, और जांच-और-परिवर्तन वैरिएबल सेट करने देती है। प्रो: हार्डवेयर ($ $) की ज़रूरत नहीं है, फ्लैश पर हार्ड-अप नहीं करता है (हार्डवेयर डीबगर के साथ ब्रेकपॉइंट्स को स्थापित करने और हटाने के रूप में)। ....
JRobert

1
.... कॉन: कार्यक्रम के कोड-स्थान, कुछ रैम स्पेस, और संभवतः रन-टाइम पर उच्च प्रभाव, यदि समय-महत्वपूर्ण कोड की जांच; लाइब्रेरी कॉल में (और बाद में, हटाने) संकलन करने के लिए कुछ सीखने की अवस्था; ब्रेक-पॉइंट स्थानों का पूर्वानुमान लगाने या उन्हें पुन: संकलित करने की आवश्यकता है जब आपको पता चलता है कि आपको उनकी आवश्यकता कहाँ है। विपक्ष Mikael के काम की आलोचना नहीं कर रहे हैं; वे इस तकनीक के साथ आते हैं।
JRobert

1
@JRobert नीस प्रो-कॉन सारांश! मैंने डिबगर को अनुरूप बनाने की अनुमति देकर विपक्ष के कुछ लोगों को संबोधित करने की कोशिश की है। परिभाषित करने का एक सेट है जो पदचिह्न संवेदनशील अनुप्रयोगों को कम से कम डिबग शेल को कम करने की अनुमति देगा। एम्बेडेड सिस्टम के लिए किसी भी डीबगर के रूप में ब्रेक-पॉइंट के साथ महत्वपूर्ण (निरंतर) कोड को डीबग करना मुश्किल है। एकमात्र विकल्प अवलोकन बिंदु हैं। इन्हें ट्रेस बफर का उपयोग करके अनुकूलित किया जा सकता है और समय महत्वपूर्ण कोड में धारावाहिक आउटपुट को हटा दिया जा सकता है।
मिकेल पटेल

3

Arduino IDE में नहीं।

आपको:

  1. एक वास्तविक IDE स्थापित करें और उसका उपयोग करें, जैसे Atmel Studio, और
  2. एक पूर्ण हार्डवेयर डीबगर का उपयोग करें

बूटलर का उपयोग करके UART / USB इंटरफ़ेस के माध्यम से डिबगिंग के लिए कोई प्रावधान नहीं है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.