अगर मैं इसे विजुअल स्टूडियो 2010 देव पर्यावरण में चलाता हूं, तो मुझे पूर्ण लाइन/कॉलम/विधि नाम जानकारी देता है, लेकिन आईआईएस पर उत्पादन वातावरण में यह सभी 0 और विधि का नाम रिक्त स्ट्रिंग के रूप में देता है।
सही। प्रकार का नाम ध्यान से पढ़ें; कि Diagnostics
महत्वपूर्ण है। उस नामस्थान के प्रकार डिबग वातावरण में समस्याओं का निदान करने के लिए डिज़ाइन किए गए थे।
क्या मुझे आईआईएस पर भी काम करने के लिए कुछ खास करने की ज़रूरत है?
नहीं; आपको डायग्नोस्टिक उपकरण उत्पादन में उपयोग करने की आवश्यकता नहीं है।
यदि किसी कारण से आप उत्पादन वातावरण में नैदानिक उपकरण का उपयोग करना चाहते हैं, तो कम से कम आपको पीडीबी फाइलों को उत्पादन वातावरण में धक्का देना होगा। यह एक खतरनाक और मूर्ख काम हो सकता है, जैसा कि हम नीचे देखेंगे। मैं अनुशंसा करता हूं कि आप ऐसा न करें।
कुछ सवाल आप से पूछना नहीं किया:
क्या उपकरण मैं एक उत्पादन वातावरण में फोन करने वाले के बारे में जानकारी प्राप्त करने के लिए उपयोग करना चाहिए?
आप लाइन नंबर, आदि, एक विधि कॉल की पाने के लिए की जरूरत है, उपकरण आप शायद का उपयोग करना चाहिए नई CallerLineNumber
है और संबंधित सी # 5.0 में जिम्मेदार बताते हैं। यहाँ उन पर एक अच्छा ब्लॉग है:
http://blog.slaks.net/2011/10/subtleties-of-c-5s-new-callerlinenumber.html
आप एक अपवाद के स्टैक ट्रेस के बारे में जानकारी प्राप्त करने के लिए की जरूरत है, जो आप देखते हैं क्या मिलेगा है।
एक डिबग वातावरण में StackTrace वस्तु एक गारंटी प्रदान करते हैं कि स्टैक ट्रेस मुझे बताता है जहां वर्तमान कॉल से आया है?
नहीं। एक स्टैक ट्रेस आपको यह नहीं बताता कि आप कहां से आए थे। एक स्टैक ट्रेस आपको बताता है जहां आप अगले जा रहे हैं। यह उपयोगी है क्योंकि आप कहां से आए थे और आप कहां जा रहे हैं, के बीच अक्सर एक मजबूत सहसंबंध होता है; आम तौर पर आप वापस जा रहे हैं जहां से आप आए थे।
हालांकि यह हमेशा सत्य नहीं है। सीएलआर कभी-कभी यह पता लगाए बिना कहां जा सकता है कि आप कहां से आए थे, इस मामले में स्टैक ट्रेस में आपकी आवश्यक जानकारी नहीं है।
उदाहरण के लिए, पूंछ कॉल अनुकूलन ढेर से फ्रेम हटा सकते हैं। इनलाइनिंग ऑप्टिमाइज़ेशन कॉलिंग विधि के हिस्से की तरह एक विधि को कॉल कर सकता है। सी # 5 में असीमित वर्कफ़्लो पूरी तरह से तलाक "आप कहाँ से आए" और "आप कहां जा रहे हैं"; एक await
के बाद फिर से शुरू होने वाली एसिंक्रोनस विधि का स्टैक ट्रेस आपको बताता है कि आप अगले await
के बाद कहां जा रहे हैं, यह नहीं कि आप पहले await
से पहले विधि में कैसे पहुंचे।
स्टैक निशान अविश्वसनीय हैं, इसलिए उन पर भरोसा न करें। उन्हें केवल नैदानिक सहायता के रूप में उपयोग करें।
एएसपी में नैदानिक जानकारी का खुलासा करना विशेष रूप से खतरनाक क्यों है?
क्योंकि हमलावर आपके सर्वर को "असाधारण" इनपुट फेंकने में विफल होने का प्रयास करेंगे। यदि यह सर्वर को नीचे लाता है, तो हमलावर खुश होंगे। यदि यह सर्वर को ऊपर रखता है लेकिन हमलावर पर आपके स्रोत कोड के बारे में जानकारी को बेहतर बनाता है, तो भी बेहतर। अब उनके पास एक अधिक परिष्कृत हमला करने के लिए उपयोग करने के लिए अधिक जानकारी है।
एएसपी सर्वरों को उत्पादन वातावरण में जितनी संभव हो उतनी छोटी नैदानिक जानकारी के रूप में पेश करना चाहिए। उस उत्पादन माहौल में आपके पास कम डीबग जानकारी है, कम गलती करने की संभावना कम है और हमलावर को आपके कार्यान्वयन के विवरण का पर्दाफाश करना है।
मैंने आपका शीर्षक संपादित किया है। कृपया देखें, "[प्रश्नों में उनके शीर्षक में" टैग "शामिल होना चाहिए?] (Http://meta.stackexchange.com/questions/19190/)", जहां आम सहमति है "नहीं, उन्हें नहीं करना चाहिए"। –
यह सही है। जब तक एप्लिकेशन डीबग मोड में संकलित नहीं होता है और प्रासंगिक .pdb फ़ाइलों को उत्पादन में बिन निर्देशिका में रखा जाता है, तब तक आपको पूर्ण डीबग जानकारी (लाइन नंबर सहित) के साथ एक स्टैक ट्रेस नहीं मिल रहा है। एक अनुशंसित अभ्यास नहीं है। –
यदि आपका कोड "रिलीज" मोड में "बिल्ड" में है, तो मुझे लगता है कि आपको लाइन नंबर नहीं मिलेगा। – dekdev