.pdb
रिलीज में संकलन करते समय विजुअल स्टूडियो 2005 फाइलें क्यों उत्पन्न करता है ? मैं एक रिलीज़ बिल्ड डिबगिंग नहीं करूंगा, इसलिए वे क्यों उत्पन्न होते हैं?
.pdb
रिलीज में संकलन करते समय विजुअल स्टूडियो 2005 फाइलें क्यों उत्पन्न करता है ? मैं एक रिलीज़ बिल्ड डिबगिंग नहीं करूंगा, इसलिए वे क्यों उत्पन्न होते हैं?
जवाबों:
क्योंकि PDB फ़ाइलों के बिना, एड्रेस-लेवल डीबगिंग के अलावा किसी भी "रिलीज़" बिल्ड को डीबग करना असंभव होगा। अनुकूलन वास्तव में आपके कोड पर एक नंबर करते हैं, जिससे अपराधी को ढूंढना बहुत मुश्किल हो जाता है अगर कुछ गलत हो जाता है (कहते हैं, एक अपवाद फेंक दिया जाता है)। यहां तक कि ब्रेकप्वाइंट सेट करना बेहद मुश्किल है, क्योंकि स्रोत कोड की लाइनों को एक-से-एक के साथ (या यहां तक कि उसी क्रम में) उत्पन्न विधानसभा कोड से मेल नहीं किया जा सकता है। पीडीबी फाइलें आपकी और डिबगर की मदद करती हैं, जिससे पोस्टमार्टम डिबगिंग काफी आसान हो जाती है।
आप यह सुनिश्चित करते हैं कि यदि आपका सॉफ़्टवेयर रिलीज़ के लिए तैयार है, तो आपको अपना सारा डिबगिंग तब तक कर लेना चाहिए। हालांकि यह निश्चित रूप से सच है, ध्यान में रखने के लिए कुछ महत्वपूर्ण बिंदु हैं:
आपको "रिलीज़" बिल्ड का उपयोग करके अपने एप्लिकेशन का परीक्षण और डीबग (रिलीज़ करने से पहले) भी करना चाहिए । ऐसा इसलिए है क्योंकि चालू अनुकूलन (वे "डिबग" कॉन्फ़िगरेशन के तहत डिफ़ॉल्ट रूप से अक्षम हैं) कभी-कभी सूक्ष्म कीड़े दिखाई दे सकते हैं जो कि आप अन्यथा पकड़ लेंगे। जब आप यह डिबगिंग कर रहे हैं, तो आप पीडीबी प्रतीकों को चाहते हैं।
ग्राहक अक्सर किनारे के मामलों और बगों की रिपोर्ट करते हैं जो केवल "आदर्श" स्थितियों के तहत फसल लेते हैं। ये ऐसी चीजें हैं जो प्रयोगशाला में पुन: पेश करना लगभग असंभव हैं क्योंकि वे उस उपयोगकर्ता की मशीन के कुछ अजीब कॉन्फ़िगरेशन पर भरोसा करते हैं। यदि वे विशेष रूप से सहायक ग्राहक हैं, तो वे उस अपवाद की रिपोर्ट करेंगे जो फेंक दिया गया था और आपको स्टैक ट्रेस प्रदान करता है। या वे आपको अपने सॉफ़्टवेयर को दूरस्थ रूप से डीबग करने के लिए अपनी मशीन से उधार लेने देंगे। या तो उन मामलों में, आप पीडीबी फाइलों को आपकी सहायता के लिए चाहते हैं।
प्रोफाइलिंग को हमेशा "रिलीज" पर किया जाना चाहिए, जो अनुकूलन योग्य है। और एक बार फिर, पीडीबी फाइलें काम में आती हैं, क्योंकि वे असेंबली निर्देशों को प्रोफाइल कोड में मैप करने की अनुमति देती हैं जो आपने वास्तव में लिखा था।
आप संकलन के बाद वापस नहीं जा सकते और पीडीबी फ़ाइलों को उत्पन्न कर सकते हैं । * यदि आप उन्हें निर्माण के दौरान नहीं बनाते हैं, तो आप अपना अवसर खो चुके हैं। यह उन्हें बनाने के लिए कुछ भी चोट नहीं करता है। यदि आप उन्हें वितरित नहीं करना चाहते हैं, तो आप बस उन्हें अपने बायनेरिज़ से हटा सकते हैं। लेकिन अगर आप बाद में तय करते हैं कि आप उन्हें चाहते हैं, तो आप भाग्य से बाहर हैं। हमेशा उन्हें उत्पन्न करने और एक प्रति संग्रह करने के लिए बेहतर है, बस अगर आपको कभी भी उनकी आवश्यकता होती है।
यदि आप वास्तव में उन्हें बंद करना चाहते हैं, तो यह हमेशा एक विकल्प है। अपने प्रोजेक्ट की प्रॉपर्टीज़ विंडो में, जिस भी कॉन्फ़िगरेशन को आप बदलना चाहते हैं, उसके लिए "डीबग इन्फो" विकल्प को "कोई नहीं" पर सेट करें।
टिप्पणी करते हैं, तथापि, कि "डीबग" और "रिलीज़" विन्यास करना डिबग जानकारी उत्सर्जन के लिए डिफ़ॉल्ट उपयोग अलग-अलग सेटिंग से। आप इस सेटिंग को रखना चाहेंगे। डीबग बिल्ड के लिए "डीबग इन्फो" विकल्प "पूर्ण" पर सेट है, जिसका अर्थ है कि पीडीबी फ़ाइल के अलावा, डिबगिंग प्रतीक जानकारी विधानसभा में एम्बेडेड है। आपको ऐसे प्रतीक भी मिलते हैं जो संपादन और जारी रखने जैसी शांत सुविधाओं का समर्थन करते हैं। रिलीज़ मोड में, "pdb-only" विकल्प का चयन किया जाता है, जो ऐसा लगता है, जिसमें विधानसभा की सामग्री को प्रभावित किए बिना केवल पीडीबी फ़ाइल शामिल है। तो यह आपकी /bin
निर्देशिका में पीडीबी फ़ाइलों की उपस्थिति या अनुपस्थिति के रूप में काफी सरल नहीं है । लेकिन मान लें कि आप "पीडीबी-ओनली" विकल्प का उपयोग करते हैं, तो पीडीबी फाइल '
* जैसा कि मार्क शर्मन एक टिप्पणी में बताते हैं , जब तक कि आपका स्रोत कोड नहीं बदला है (या आप संस्करण-नियंत्रण प्रणाली से मूल कोड को पुनः प्राप्त कर सकते हैं), आप इसे फिर से बना सकते हैं और एक मिलान पीडीबी फ़ाइल उत्पन्न कर सकते हैं। कम से कम, आमतौर पर। यह ज्यादातर समय अच्छी तरह से काम करता है, लेकिन जब आप समान कोड संकलित करते हैं तो हर बार समान बायनेरिज़ बनाने के लिए कंपाइलर की गारंटी नहीं होती है , इसलिए सूक्ष्म अंतर हो सकते हैं। इससे भी बदतर, अगर आपने इस बीच अपने टूलकिन में कोई अपग्रेड किया है (जैसे विजुअल स्टूडियो के लिए सर्विस पैक लागू करना), तो पीडीबी के मैच होने की संभावना कम है। की विश्वसनीय पीढ़ी की गारंटी के लिएपूर्व postfactoपीडीबी फाइलें, आपको अपने संस्करण-नियंत्रण प्रणाली में न केवल स्रोत कोड को संग्रहीत करने की आवश्यकता होगी, बल्कि आपके पूरे बिल्ड टूलचैन के लिए बायनेरिज़ भी सुनिश्चित करने के लिए कि आप अपने बिल्ड वातावरण के कॉन्फ़िगरेशन को फिर से बना सकते हैं। यह बिना कहे चला जाता है कि पीडीबी फाइलों को केवल बनाना और संग्रह करना बहुत आसान है।
.reload /i foo.dll
। यह foo.pdb को लोड करेगा भले ही foo.pdb को foo.dll जारी करने के बाद बनाया गया हो।
पीडीबी के लिए और Release
साथ ही उत्पन्न किया जा सकता है Debug
। यह (VS2010 में लेकिन VS2005 में समान होना चाहिए) पर सेट है:
प्रोजेक्ट → गुण → बिल्ड → एडवांस → डीबग इन्फो
बस इसे बदल दो None
।
FileNotFoundException
), लेकिन आप स्टैक ट्रेस नहीं देख पाएंगे। इससे यह पता लगाना बहुत मुश्किल हो जाता है कि कोड की किस लाइन के कारण अपवाद को फेंका गया था।
.Pdb फ़ाइलों के बिना उत्पादन कोड के माध्यम से कदम रखना लगभग असंभव है; आपको अन्य साधनों पर निर्भर रहना पड़ता है जो महंगे और समय लेने वाले हो सकते हैं। मैं समझता हूं कि आप उदाहरण के लिए ट्रेसिंग या विंडबग का उपयोग कर सकते हैं लेकिन यह वास्तव में इस बात पर निर्भर करता है कि आप क्या हासिल करना चाहते हैं। कुछ परिदृश्यों में आप केवल दूरस्थ कोड (कोई त्रुटि या अपवाद नहीं) के माध्यम से विशेष डेटा का पालन करने के लिए उत्पादन डेटा का उपयोग करना चाहते हैं, और यह वह जगह है जहाँ .pdb फाइलें काम आती हैं। उनके बिना उस कोड पर डिबगर चलाना असंभव है।
आप इतने निश्चिंत क्यों हैं कि आप रिलीज बिल्ड को डिबग नहीं करेंगे? कभी-कभी (उम्मीद से कम ही लेकिन होता है) आपको एक ग्राहक से एक दोष रिपोर्ट मिल सकती है जो किसी कारण (अलग समय, छोटे अलग व्यवहार या जो भी) के लिए डिबग संस्करण में प्रतिलिपि प्रस्तुत करने योग्य नहीं है। यदि यह समस्या रिलीज़ बिल्ड में प्रतिलिपि प्रस्तुत करने योग्य प्रतीत होती है, तो आपको मिलान pdb प्राप्त करने में खुशी होगी।
इसके अलावा, आप अपने सॉफ़्टवेयर को डीबग करने के लिए क्रैश डंप का उपयोग कर सकते हैं। ग्राहक इसे आपके पास भेजता है और फिर आप इसका उपयोग अपने स्रोत के सटीक संस्करण की पहचान करने के लिए कर सकते हैं - और विज़ुअल स्टूडियो क्रैश डंप का उपयोग करके डिबगिंग प्रतीकों के सही सेट (और यदि आप सही तरीके से सेट किए गए हैं) को भी खींच लेंगे। प्रतीक भंडार पर Microsoft के दस्तावेज़ देखें ।
.PDB फ़ाइल "प्रोग्राम डेटाबेस" का संक्षिप्त नाम है। इसमें डीबगर और संसाधनों के लिए डिबग बिंदु के बारे में जानकारी है जो उपयोग या संदर्भ के लिए है। यह तब उत्पन्न होता है जब हम डिबग मोड के रूप में निर्माण करते हैं। इसके रनटाइम में डिबग के लिए आवेदन करने की अनुमति है।
आकार डीबग मोड में .PDB फ़ाइल की वृद्धि है। इसका उपयोग तब किया जाता है जब हम अपने आवेदन का परीक्षण कर रहे होते हैं।
Pdb फ़ाइल का अच्छा लेख।
http://www.codeproject.com/Articles/37456/How-To-Inspect-the-Content-of-a-Program-Database-P
एक बहु-परियोजना समाधान में, आप आमतौर पर एक कॉन्फ़िगरेशन लेना चाहते हैं जो बिना पीडीबी या एक्सएमएल फ़ाइलों को बिल्कुल उत्पन्न करता है। Debug Info
हर प्रोजेक्ट की संपत्ति को बदलने के बजाय none
, मैंने सोचा कि पोस्ट-बिल्ड इवेंट को जोड़ना अधिक समीचीन होगा जो केवल एक विशिष्ट कॉन्फ़िगरेशन में काम करता है।
दुर्भाग्य से, विज़ुअल स्टूडियो आपको अलग-अलग कॉन्फ़िगरेशन के लिए अलग-अलग पोस्ट-बिल्ड इवेंट निर्दिष्ट करने की अनुमति नहीं देता है। इसलिए मैंने csproj
स्टार्टअप प्रोजेक्ट की फाइल को एडिट करके और निम्नलिखित को जोड़कर (किसी मौजूदा PostBuildEvent
टैग के बजाय ) मैन्युअल रूप से ऐसा करने का फैसला किया :
<PropertyGroup Condition="'$(Configuration)' == 'Publish'">
<PostBuildEvent>
del *.pdb
del *.xml
</PostBuildEvent>
</PropertyGroup>
दुर्भाग्य से, यह पोस्ट बिल्ड ईवेंट टेक्स्टबॉक्स को खाली कर देगा और इसमें कुछ भी डालने पर अप्रत्याशित परिणाम हो सकते हैं।
*.xml
फ़ाइलों को हटा देगा , इससे सावधान रहें।
डीबग प्रतीक ( .pdb) और XML डॉक्स ( .xml) फ़ाइलें कुल आकार का एक बड़ा प्रतिशत बनाती हैं और इन्हें नियमित परिनियोजन पैकेज का हिस्सा नहीं होना चाहिए। लेकिन अगर उन्हें जरूरत हो तो उन्हें एक्सेस करना संभव है।
एक संभावित दृष्टिकोण: टीएफएस निर्माण प्रक्रिया के अंत में, उन्हें एक अलग विरूपण साक्ष्य में स्थानांतरित करें।
वास्तव में पीडीबी फाइलें और प्रतीकात्मक जानकारी के बिना उनके पास एक सफल क्रैश रिपोर्ट (मेमोरी डंप फाइलें) बनाना असंभव होगा और Microsoft के पास पूरी तस्वीर नहीं होगी जो समस्या का कारण बने।
और इसलिए PDB होने से क्रैश रिपोर्टिंग में सुधार होता है।