ट्रेसिंग (सॉफ्टवेयर)

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

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

यह आलेख मुख्य रूप से डिबगिंग या नैदानिक ​​उद्देश्यों के लिए ट्रेसिंग से संबंधित है।

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

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

क्योंकि इवेंट लॉगिंग का उपयोग उच्च-स्तरीय जानकारी (अक्सर विफलता की जानकारी) को लॉग करने के लिए किया जाता है, लॉगिंग कार्यान्वयन का प्रदर्शन अक्सर कम महत्वपूर्ण होता है।

एक विशेष चिंता, डुप्लिकेट ईवेंट को बहुत बार रिकॉर्ड होने से रोकना, इवेंट थ्रॉटलिंग के माध्यम से ध्यान रखा जाता है।

सॉफ्टवेयर ट्रेसिंग
सॉफ्टवेयर ट्रेसिंग डेवलपर्स को डिबगिंग के लिए उपयोगी जानकारी प्रदान करता है। इस जानकारी का उपयोग विकास चक्रों के दौरान और सॉफ़्टवेयर के रिलीज़ होने के बाद दोनों में किया जाता है। इवेंट लॉगिंग के विपरीत, सॉफ़्टवेयर ट्रेसिंग में आमतौर पर ईवेंट या ईवेंट कोड की श्रेणी की अवधारणा नहीं होती है। सॉफ़्टवेयर ट्रेसिंग के लिए ईवेंट कोड पर आधारित ईवेंट-लॉगिंग समाधान अनुपयुक्त होने के अन्य कारणों में शामिल हैं:
 * क्योंकि सॉफ्टवेयर ट्रेसिंग निम्न स्तर का है, ऐसे कई और प्रकार के संदेश होते हैं जिन्हें परिभाषित करने की आवश्यकता होती है, जिनमें से कई कोड में केवल एक ही स्थान पर उपयोग किए जाएंगे। इवेंट-कोड प्रतिमान इन एक-शॉट संदेशों के लिए महत्वपूर्ण विकास ओवरहेड का परिचय देता है।
 * इवेंट लॉगिंग की तुलना में लॉग किए गए संदेशों के प्रकार अक्सर विकास चक्र के माध्यम से कम स्थिर होते हैं।
 * क्योंकि ट्रेसिंग आउटपुट का उपयोग डेवलपर द्वारा किया जाना है, संदेशों को स्थानीयकृत करने की आवश्यकता नहीं है। ट्रेसिंग संदेशों को अन्य संसाधनों से अलग रखना जिन्हें स्थानीयकृत करने की आवश्यकता है (जैसे ईवेंट संदेश) इसलिए महत्वपूर्ण है।
 * संदेश हैं कि अभिकथन (कंप्यूटिंग)।
 * ट्रेसिंग संदेशों को कोड में रखा जाना चाहिए, क्योंकि वे कोड की पठनीयता में वृद्धि कर सकते हैं। इवेंट-लॉगिंग समाधानों के साथ यह हमेशा संभव या व्यवहार्य नहीं होता है।

सॉफ्टवेयर ट्रेसिंग के लिए एक अन्य महत्वपूर्ण विचार प्रदर्शन है। क्योंकि सॉफ़्टवेयर ट्रेसिंग निम्न-स्तर है, ट्रेस संदेशों की संभावित मात्रा बहुत अधिक है। प्रदर्शन संबंधी चिंताओं को दूर करने के लिए, अक्सर संकलक | कंपाइल-टाइम या रन-टाइम पर सॉफ़्टवेयर ट्रेसिंग को बंद करना संभव होना चाहिए।

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

तकनीक
सॉफ्टवेयर अनुरेखण: इवेंट लॉगिंग:
 * ट्रेसिंग मैक्रोज़
 * डिबगर को आउटपुट
 * पहलू-उन्मुख प्रोग्रामिंग और संबंधित इंस्ट्रूमेंटेशन (कंप्यूटर प्रोग्रामिंग) तकनीकें
 * विंडोज सॉफ्टवेयर ट्रेस प्रीप्रोसेसर (उर्फ WPP)
 * DTrace के साथ FreeBSD और SmartOS ट्रेसिंग - कर्नेल और यूजरलैंड का पता लगाता है
 * ftrace के साथ लिनक्स कर्नेल ट्रेसिंग
 * कर्नेल मार्कर और LTTng के साथ लिनक्स सिस्टम-लेवल और यूजर-लेवल ट्रेसिंग
 * यूएसटी के साथ लिनक्स एप्लिकेशन ट्रेसिंग - एलटीटीएनजी के समान परियोजना का हिस्सा
 * Linux C/C++ एप्लिकेशन ट्रेसिंग cwrap के साथ
 * जीएनयू डीबगर के ट्रेस कमांड के साथ ट्रेसिंग
 * syslog (विशिष्ट कार्यान्वयन के लिए आलेख देखें)

दोनों के लिए उपयुक्त:
 * निर्देश सेट सिम्युलेटर

यह भी देखें

 * शाखा ट्रेस
 * इंस्ट्रुमेंटेशन (कंप्यूटर प्रोग्रामिंग)
 * लॉगिंग (सॉफ्टवेयर)
 * डिबगिंग