एक निश्चित सुविधा को लागू करने वाले स्रोत कोड का पता कैसे लगाएं? [बन्द है]


14

मैं सोच रहा था कि कुछ तकनीकों का पता लगाने के लिए कौन से कोड एक विशिष्ट सुविधा को लागू करते हैं, एक डेस्कटॉप अनुप्रयोग पर।

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

लेकिन आप डेस्कटॉप अनुप्रयोगों में यह कैसे करते हैं? कम से कम, पूर्ण कोडबेस में गोता लगाने के बिना?


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

और मुझे ब्रेकपॉइंट्स कहां सेट करना चाहिए?
py_script

ब्रेकपॉइंट की स्थापना पूरी तरह से आपके आवेदन पर निर्भर करती है कि यह कैसे व्यवस्थित है।

2
यह वास्तव में "निरीक्षण" करने के लिए कुछ हद तक कठिन हो सकता है और देख सकता है कि बैकबोन.जेएस और टेम्प्लेट जैसे नए ऑब्जेक्ट-ओरिएंटेड सिस्टम के साथ कहां और कैसे वेब-इंटरफेस बनाए गए, जो अधिक लोकप्रिय हो रहे हैं।
NoBugs

1
@ जैफो जब आप करते हैं, उदाहरण के लिए, फ़ाइल-> एक एप्लिकेशन में खोलें (लिब्रे ऑफिस के राइटर कहते हैं) आप कैसे पा सकते हैं कि इसके पीछे कॉल अनुक्रम क्या है?
21_31 पर py_script

जवाबों:


21

पीछे ट्रेसिंग

बैक ट्रेसिंग फीचर से जुड़े किसी इवेंट के लिए एक समापन बिंदु का पता लगा रहा है (नीचे देखें)। एक बार वहाँ, एक ब्रेकपॉइंट डीबगर में रखा जाता है। जब डीबगर बंद हो जाता है तो सुविधा चालू हो जाती है। कॉल स्टैक का पता लगाने के लिए कॉल स्टैक की समीक्षा की जाती है। कॉल स्टैक ऊपर चलते समय आप चर राज्यों पर नोट्स ले सकते हैं, या फिर घटना का निरीक्षण करने के लिए नए ब्रेकप्वाइंट लगा सकते हैं।

फीचर फिर से ट्रिगर होता है और डिबगर नए ब्रेकपॉइंट्स पर रुक जाता है। आप तब तक ट्रेसिंग को दोहरा सकते हैं या लक्ष्य का पता लगाने तक फॉरवर्ड ट्रेसिंग कर सकते हैं।

फायदे नुकसान

  • कॉल स्टैक को चलना और यह देखना आसान है कि आप कहीं गए।
  • एक समापन बिंदु तक पहुँचने से पहले लाखों स्थितियाँ सच हो सकती हैं। यदि आपको पता है कि समापन बिंदु पहले से ही आप अपने आप को बहुत काम बचा लिया है।
  • यदि सुविधा टूटी हुई है। आप कभी भी अंतिम बिंदु तक नहीं पहुंच सकते हैं, और यह जानने की कोशिश में समय बर्बाद हो सकता है।

समापन बिंदु खोज

किसी विशेषता को डीबग करने के लिए आपको यह जानना होगा कि स्रोत कोड में अंतिम लक्ष्य कहां प्राप्त होता है। केवल इस बिंदु से आप कर सकते हैं पश्व-अनुरेखन देखना चाहते हैं कि कोड वहाँ गया। एक उदाहरण; यह समझने के लिए कि प्रदर्शन कैसे किया जाता है। आपको पता है कि कोड में चीजें पूर्ववत कहां हैं, लेकिन आप नहीं जानते कि चीजें कैसे मिलती हैं । इस के लिए एक उम्मीदवार होगा backtracing यह पता लगाने की कैसे सुविधा काम करता है।

आगे ट्रेसिंग

फॉरवर्ड ट्रेसिंग एक सुविधा से जुड़े एक घटना के लिए एक शुरुआती बिंदु का पता लगा रहा है (नीचे देखें)। एक बार वहाँ, लॉगिंग संदेशों को स्रोत कोड में डाला जाता है या ब्रेकपॉइंट सेट किए जाते हैं। यह प्रक्रिया तब तक दोहराई जाती है जब तक आप प्रारंभ बिंदु से और आगे नहीं बढ़ते हैं जब तक कि आप सुविधा के लिए लक्ष्य की खोज नहीं करते हैं।

फायदे नुकसान

  • यह एक सुविधा खोजने के लिए सबसे आसान शुरुआती बिंदु है।
  • कोड जटिलता आगे ट्रेसिंग की प्रभावशीलता को कम करती है। कोड में जितनी अधिक परिस्थितियां होंगी उतनी अधिक संभावना होगी कि आप गलत दिशा में जाएंगे।
  • फॉरवर्ड ट्रेसिंग से अक्सर ब्रेकपॉइंट की स्थापना होती है जो असंबंधित घटनाओं से चालू हो जाएगा। डिबगिंग प्रक्रिया को बाधित करना और आपकी खोज में हस्तक्षेप करना।

प्वाइंट डिस्कवरी शुरू करें

आप कीवर्ड, उपयोगकर्ता इंटरफ़ेस आइडेंटिफ़ायर (बटन आईडी, विंडो नाम) या सुविधा से जुड़े ईवेंट श्रोताओं को खोजने के लिए उपयोग कर सकते हैं। उदाहरण के लिए, आप पूर्ववत सुविधा को ट्रिगर करने के लिए उपयोग किए जाने वाले बटन से शुरू कर सकते हैं।

उन्मूलन की प्रक्रिया

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

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

आपको पथ के निर्देशों का पालन नहीं करके स्थिति दिशाओं को कम करना होगा जो स्पष्ट रूप से सुविधा के लिए निष्पादित नहीं किए जाएंगे। इस कोड से आगे बढ़ते हुए और केवल ब्रेकप्वाइंट रखकर जहां यह सुविधा से संबंधित है।

मध्य बिंदु डिबगिंग में अक्सर अधिक अग्रिम आईडीई सुविधाओं की आवश्यकता होती है। कोड पदानुक्रम और निर्भरता देखने की क्षमता। उन उपकरणों के बिना यह करना मुश्किल है।

फायदे नुकसान

  • मध्य बिंदु अक्सर कोड का पहला मसाला होता है जो आपके दिमाग में उस समय आता है जब आप फीचर के बारे में सोचते हैं। आप अपने आप से कहते हैं "आह, जिसे काम करने के लिए XXXX का उपयोग करना है।"
  • मध्य बिंदु शुरू अंक प्रकट कर सकते हैं सबसे आसान।
  • सिंक्रोनाइज़ेशन या थ्रेडिंग परिवर्तन द्वारा खो जाने पर एक विशेषता के लिए मध्य बिंदुओं को लेने के लिए मध्य बिंदु एक आसान तरीका हो सकता है।
  • मध्य बिंदु आपको उस कोड पर ले जा सकते हैं जिससे आप परिचित नहीं हैं। आपको यह जानने में समय लगता है कि क्या हो रहा है।

धन्यवाद मैथ्यू, महान दृष्टिकोण। लेकिन आपको एक शुरुआत कैसे मिलती है (क्षमा करें, अगर यह मेरे लिए स्पष्ट है लेकिन)?
py_script

@py_script आप किस प्रोग्रामिंग भाषा से परेशान हैं?
रिएक्टगुलर

यह मेरे पास एक विशिष्ट समस्या के बारे में नहीं है, लेकिन मेरी मुख्य डेस्कटॉप प्रोग्रामिंग भाषा जावा है, इसलिए इसके साथ जाने दें
py_script

11

यह मानते हुए कि सुविधा कुछ UI चीज़ों से बंधी है, जैसे कि बटन या मेनू, मैं जो कुछ भी करता हूं, वह इस प्रकार है (बहुत थकाऊ लेकिन यह काम करता है)। यह स्रोत कोड के माध्यम से देख रहा है, डिबगर का उपयोग नहीं कर रहा है

  1. बटन पर (उम्मीद है कि विशिष्ट) पाठ के लिए खोजें, जैसे "सुपर फ़ीचर X3"।
  2. यह कुछ निरंतर के साथ एक फ़ाइल में है, उदाहरण के लिए SUPER_BUTTON_3 = "Super Feature X3"। भविष्य के संदर्भ के लिए, इस फ़ाइल का नाम याद रखें।
  3. अमूर्तता की एक और परत (यहां तक ​​कि दो) हो सकती है, बटन द्वारा उपयोग किए जाने वाले "वास्तविक" स्ट्रिंग को प्राप्त करने के लिए खोज करते रहें। ध्यान दें कि यह भविष्य के लिए कैसे किया जाता है।
  4. अब उस स्थिरांक पर खोज करें। उम्मीद है कि अब आपको बटन मिल गया होगा। शायद यही वह जगह है जहाँ वे ActionListener को जोड़ते हैं। (मैं यहां जावा-यस, वाईएमएमवी ले रहा हूं, लेकिन अवधारणा अभी भी मौजूद है)
  5. यदि आवश्यक हो, तो उस बटन पर खोज करें और आप अंततः पाएंगे कि यह कहाँ से श्रोता से जुड़ा हुआ है।
  6. शायद वह श्रोता वास्तव में अन्य श्रोताओं ("वास्तविक" कार्यक्षमता) को रीडायरेक्ट करता है जो स्थिरांक पर आधारित होता है, यदि हां, तो उस का अनुसरण करें यदि / अन्यथा या केस स्टेटमेंट। नोट : यदि कोई केंद्रीय प्रेषण चीज़ है, तो यह ब्रेकपॉइंट को सेटअप करने के लिए एक शानदार जगह है
  7. अंत में, आपको वास्तविक कोड में होना चाहिए।

जैसा कि @amon ने कहा, कभी-कभी एक डीबगर सरल होता है ...


दिलचस्प एक ... शुक्र है कि ऐसे नाम आमतौर पर कोड में हार्डकोड होते हैं :)
py_script

3
  • यदि आपको कोई भी संबंधित कोड मिल सकता है, तो आप अपने स्रोत नियंत्रण सॉफ्टवेयर का उपयोग करके आपको पूरे कमिट या आस-पास के कमिट दिखा सकते हैं। आपको वह सब कुछ दिखाना चाहिए जो उस सुविधा को लागू करने के लिए आवश्यक था।

  • देखने के लिए कुछ शुरुआती बिंदु खोजने का एक आसान तरीका बटन पर पाठ की तलाश में अपने कोडबेस के माध्यम से पकड़ना होगा।

  • अक्सर, लोग अपने इश्यू ट्रैकर में अपने इश्यू ट्रैकर से एक इश्यू आईडी डालते हैं। यदि आप सुविधा अनुरोध का वर्णन करने वाली समस्या पा सकते हैं, तो आप उस समस्या आईडी के साथ कमिट की खोज कर सकते हैं।


यह एक स्मार्ट दृष्टिकोण है लेकिन मुझे लगता है कि यह केवल कॉर्पोरेट वातावरण पर काम करता है। अगर आपके पास सिर्फ एक टारबॉल है तो क्या होगा?
py_script
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.