PDB फाइल क्या है?


251

पीडीबी फ़ाइल क्या है और जब मैं अपने समाधान का पुनर्निर्माण करता हूं तो मैं इसे रिलीज़ फ़ोल्डर से कैसे निकाल सकता हूं?


17
pdb एक प्रोग्राम डेटाबेस फाइल है और इसे कंपाइल पर बनाया गया है। यह फ़ाइल डीबगिंग और प्रोजेक्ट स्थिति की जानकारी रखती है जो आपके प्रोग्राम के डीबग कॉन्फ़िगरेशन को बढ़ाने की अनुमति देती है।
पक्का

@pavanred क्या आप सुनिश्चित हैं कि सी # संकलक भी वृद्धिशील लिंकिंग करता है? मैंने केवल C ++ दुनिया में इसके बारे में सुना है। C ++ प्रोजेक्ट में आप प्रोजेक्ट गुणों से वृद्धिशील लिंक को सक्षम / अक्षम करते हैं। क्या C # प्रोजेक्ट में भी कोई विकल्प है?
आरबीटी

जवाबों:


235

एक PDB फ़ाइल में डिबगर के साथ काम करने के लिए जानकारी होती है। डिबग बिल्ड की तुलना में रिलीज़ बिल्ड में कम जानकारी होती है। लेकिन अगर आप चाहते हैं कि यह बिल्कुल उत्पन्न न हो, तो अपने प्रोजेक्ट की बिल्ड प्रॉपर्टीज पर जाएं, रिलीज कॉन्फ़िगरेशन चुनें, "उन्नत ..." पर क्लिक करें और "डीबग इन्फो" के तहत "कोई नहीं" चुनें।


2
@ यदि एप्लिकेशन उपयोग में क्रैश होता है तो क्या यह उपयोगकर्ता को अतिरिक्त जानकारी प्रदान करने में मदद करता है? (यानी, क्या यह JIT विंडो के साथ मदद करता है, बल्कि "इस कार्यक्रम को समाप्त करने की आवश्यकता है, एक विंडोज त्रुटि रिपोर्ट भेजें")
Jared Harley

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

4
@Jared: हाँ, इसमें अपवाद का एक स्टैक ट्रेस शामिल है, जो एक विशिष्ट फ़ंक्शन और कोड की लाइन को इंगित करेगा।
दरबियो

1
@ जेरेड: "JIT विंडो" से आपका क्या तात्पर्य है? यह उपयोगकर्ता को बहुत अधिक जानकारी देने की संभावना नहीं है, लेकिन यह आपको डिबगर को रिलीज बिल्ड में संलग्न करने की अनुमति दे सकता है यदि आपको आवश्यकता है। आमतौर पर आप इसे एंड-यूज़र एप्लिकेशन के लिए शामिल नहीं करेंगे। बेशक, सिर्फ इसलिए कि इसे रिलीज़ फ़ोल्डर में कॉपी किया गया है, इसका मतलब यह नहीं है कि आपको इसे इंस्टॉलर
जॉन स्कीट

3
@ एटा: पीडीबी, पीडीएफ नहीं। कृपया अपने दिमाग में दो को अलग करें - वे अलग-अलग उद्देश्यों के लिए पूरी तरह से अलग फ़ाइल प्रारूप हैं। एक PDB सहित विशेष रूप से एक समस्या का परिचय नहीं होगा; यह हो सकता है एक हैकर की नौकरी कर थोड़ा आसान है, लेकिन है आप के लिए एक विशेष चिंता है? सामान्य तौर पर, .NET ज्यादातर मामलों में अपेक्षाकृत आसानी से विघटित हो सकता है - यदि आप इसके बारे में चिंतित हैं, तो बस पीडीबी को शिपिंग नहीं करना एक अच्छा समाधान नहीं है।
जॉन स्कीट

129

मैंने मूल रूप से खुद से सवाल पूछा था " क्या मुझे अपने ग्राहक की मशीन पर तैनात पीडीबी फ़ाइल की आवश्यकता है? " और इस पोस्ट को पढ़ने के बाद, फ़ाइल को बाहर करने का फैसला किया।

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


2
यह ध्यान में रखने के लिए एक बहुत ही महत्वपूर्ण हिस्सा है जिसका accepted answerयहां उल्लेख नहीं है।
मोनू

85

PDB P rogram D ata B ase का संक्षिप्त नाम है । जैसा कि नाम से पता चलता है, यह डिबग मोड में अपने प्रोग्राम को चलाने के लिए आवश्यक जानकारी बनाए रखने के लिए एक रिपॉजिटरी (लगातार भंडारण जैसे डेटाबेस) है। इसमें आपके कोड (विज़ुअल स्टूडियो में) को डिबग करते समय आवश्यक कई महत्वपूर्ण प्रासंगिक जानकारी समाहित है, उदाहरण के लिए आपने किस बिंदु पर ब्रेक पॉइंट सम्मिलित किए हैं जहाँ आप डीबगर को विजुअल स्टूडियो में तोड़ने की अपेक्षा करते हैं।

यही कारण है कि यदि आप *.pdbअपने डिबग फ़ोल्डर से फ़ाइलों को हटाते हैं तो कई बार विज़ुअल स्टूडियो ब्रेक पॉइंट्स को हिट करने में विफल रहता है । विजुअल स्टूडियो डीबगर आपको कोड फ़ाइल की सटीक लाइन संख्या भी बताने में सक्षम है, जिस पर *.pdbफाइलों की मदद से स्टैक ट्रेस में एक अपवाद उत्पन्न हुआ । प्रोग्राम को डिबेट करते समय डेवलपर्स के लिए प्रभावी रूप से पीडीबी फाइलें वास्तव में एक वरदान हैं।

आम तौर पर *.pdbफाइलों की पीढ़ी को बाहर करने की सिफारिश नहीं की जाती है । प्रोडक्शन रिलीज़ स्टैंड-पॉइंट से जो आपको करना चाहिए वह pdb फाइल्स बनाता है, लेकिन उन्हें प्रोडक्ट इंस्टॉलर में कस्टमर साइट पर शिप न करें। जहां तक ​​आवश्यक हो भविष्य में इसका उपयोग / संदर्भित किया जा सकता है, जहां से एक प्रतीक सर्वर पर सभी उत्पन्न PDB फ़ाइलों को संरक्षित करें। विशेष रूप से ऐसे मामलों के लिए जब आप प्रक्रिया क्रैश जैसे मुद्दों को डीबग करते हैं। जब आप क्रैश डंप फ़ाइलों का विश्लेषण करना शुरू करते हैं और यदि *.pdbबिल्ड प्रक्रिया के दौरान बनाई गई आपकी मूल फाइलें संरक्षित नहीं होती हैं, तो विज़ुअल स्टूडियो कोड की सटीक लाइन नहीं बना पाएगा जो दुर्घटना का कारण बन रही है

यदि आप अभी भी *.pdbकिसी भी रिलीज़ के लिए पूरी तरह से फ़ाइलों की पीढ़ी को अक्षम करना चाहते हैं, तो प्रोजेक्ट के गुणों पर जाएं -> टैब बनाएँ -> Advancedबटन पर क्लिक करें -> none"डीबग इन्फो" ड्रॉप-डाउन बॉक्स से चुनें -> OKनीचे स्नैपशॉट में दिखाए अनुसार दबाएं ।

सी # प्रोजेक्ट के लिए कोई भी डीबग इन्फो सेटिंग नहीं

नोट : यह सेटिंग "डीबग" और "रिलीज़" बिल्ड कॉन्फ़िगरेशन के लिए अलग से करनी होगी।


13

एक PDB फ़ाइल डिबगर द्वारा प्रयोग किया जाता में जानकारी शामिल है। यह आपके एप्लिकेशन को चलाने के लिए आवश्यक नहीं है और इसे आपके जारी किए गए संस्करण में शामिल करने की आवश्यकता नहीं है।

आप Visual Studio में बनाए जाने से pdb फ़ाइलों को अक्षम कर सकते हैं। यदि आप कमांड लाइन या स्क्रिप्ट से निर्माण कर रहे हैं तो /Debugस्विच को छोड़ दें ।


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

हाँ; यह अभी भी एक डिफ़ॉल्ट परियोजना के साथ रिलीज के साथ आता है।
एंड्रयू नाई

मैंने अभी-अभी जाँच की है और मैं Visual Studio का उपयोग करते हुए डिफ़ॉल्ट रूप से एक प्राप्त करता हूं।
मार्क बायर्स

4

प्रोग्राम डीबग डेटाबेस फ़ाइल (पीडीबी) Microsoft द्वारा डिबगिंग जानकारी संग्रहीत करने के लिए एक फ़ाइल प्रारूप है।

जब आप Visual Studio या कमांड प्रॉम्प्ट का उपयोग कर प्रोजेक्ट बनाते हैं तो कंपाइलर इन सिंबल फाइल्स को बनाता है।

Microsoft डॉक्स की जाँच करें

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.