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

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

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

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

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

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

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

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

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

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

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

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

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

यह भी देखें

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