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

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

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

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

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

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

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

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

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

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

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

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

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

यह भी देखें

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