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

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

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

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

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

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

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

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

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

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

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

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

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

यह भी देखें

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