2010-09-26 16 views
13

मैं क्या संकलक और लिंकर PDB फ़ाइलों क्रमशः (अर्थात दृश्य स्टूडियो में, Project Properties > C/C++ > Output Files > Program Database File Name बनाम Project Properties > Linker > Debugging) के बीच का अंतर है के रूप में उलझन में हो रही हूँ। मैंने ऑनलाइन जवाब खोजने की कोशिश की है और अब तक मुझे पता है (गलत हो सकता है) PDB फ़ाइल को संकलक द्वारा obj फ़ाइलों के लिए जेनरेट किया गया है जबकि PDB फ़ाइलर द्वारा फ़ाइल बाइनरी (exe या dll) के लिए जेनरेट की गई है और यह है डीबगिंग के लिए इस्तेमाल किया जाता है।संकलक PDB फ़ाइल और लिंकर PDB फ़ाइल

यदि यह सत्य नहीं है, तो कृपया अंतर बताएं। किसी भी तरह से, जब मैं DLL बना रहा हूं, तो मुझे क्या करना होगा जहां मेरे पास संकलक के साथ-साथ लिंकर के लिए आउटपुट PDB फ़ाइल का चयन करने का विकल्प है और जब मैं एक LIB फ़ाइल बना रहा हूं तो क्या करना है जहां केवल संकलक PDB फ़ाइलों को उत्पन्न करता है क्योंकि कोई लिंकिंग नहीं किया गया है।

पृष्ठभूमि: पुस्तकालयों/DLLs कई परियोजनाओं, जो तब डिबगिंग के लिए PDB फ़ाइलों की जरूरत द्वारा किया जाता है। lib फ़ाइल के मामले में, कोई अस्पष्टता नहीं है क्योंकि केवल एक PDB फ़ाइल उत्पन्न हुई है। लेकिन DLL के मामले में, क्या मुझे PDB फ़ाइलों को ठीक से डिबग करने या केवल लिंकर द्वारा जेनरेट की गई दोनों की आवश्यकता है?

उत्तर

12

मैं ईमानदारी से नहीं जानता कि वास्तव में क्या .pdb संकलन कदम से उत्पन्न फ़ाइल के लिए प्रयोग किया जाता है - मुझे लगता है कि यह कुछ मध्यवर्ती जानकारी संयोजक द्वारा अंतिम .pdb फ़ाइल में खींच लिया जाता है।

हालांकि, नीचे की रेखा यह है कि डिबगिंग उद्देश्यों के लिए आपको केवल .pdb फ़ाइल है जो लिंकर द्वारा उत्पादित की जाती है।


अद्यतन: एक छोटी सी खुदाई http://blogs.msdn.com/b/yash/archive/2007/10/12/pdb-files-what-are-they-and-how-to-generate-them.aspx से इस netted:

.pdb फ़ाइलें के दो प्रकार के होते हैं?

==============================

PDB फ़ाइलों के दो प्रकार के होते हैं। एक VCx0.PDB (उदा। Vc80.pdb) नामक कंपाइलर द्वारा उत्पन्न किया गया, और दूसरा पीडीबी।

वीसीएक्स 0.पीडीबी फ़ाइल कंपाइलर द्वारा उत्पन्न की गई है और यह ओबीजे फ़ाइल से संबंधित है। इसमें केवल प्रकार की जानकारी शामिल है।

पीडीबी फाइलें लिंकर द्वारा जेनरेट की गई हैं और यह लक्ष्य निष्पादन योग्य या डीएलएल से संबंधित है। इस फ़ाइल में पूर्ण डीबग जानकारी है। जब हम डिबगिंग करते हैं, तो हमें प्रतीकों को संरेखित करने के लिए इस '.pdb' फ़ाइल की आवश्यकता होती है। लक्ष्य फ़ाइल का टाइमस्टैम्प और पीडीबी मेल खाना चाहिए।

+0

(इस पोस्ट से पहले अपने अद्यतन, लेकिन यह अद्यतन करने के साथ ही लागू होता है) तो जब मैं 'lib' फ़ाइल (अर्थात, एक स्थिर पुस्तकालय), और केवल संकलक बनाने' pdb उत्पन्न कर सकते हैं 'चूंकि लिंकर की अब आवश्यकता नहीं है, क्या इसका मतलब यह है कि अब संकलक द्वारा उत्पन्न' पीडीबी 'फाइल डीबगिंग के लिए आवश्यक है? – Samaursa

+1

.lib फ़ाइलें किसी प्रोग्राम के निष्पादन या डिबगिंग में शामिल नहीं हैं। वे केवल लिंकर के लिए इनपुट हैं। एक lib फ़ाइल में उचित 'सामान' या तो बाइनरी (स्थिर पुस्तकालय के मामले में) का हिस्सा बनता है या डीएलएल (आयात पुस्तकालय के मामले में) के गतिशील लिंक बनाने के लिए उपयोग किया जाता है। इनमें से किसी भी मामले में, .pdb फ़ाइल जिसे आपको डिबगिंग के लिए चाहिए, वह लिंकर द्वारा उत्पादित किया गया है जब वास्तविक .exe या .dll फ़ाइल उत्पन्न होती है। –

+1

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

संबंधित मुद्दे