2008-09-09 18 views
7

मुझे स्रोत कोड के बिना किसी तृतीय-पक्ष घटक का उपयोग करना होगा। मेरे पास डीएलएल रिलीज है और पीडीबी फाइल रिलीज है। आइए इसे 'CorporateComponent.dll' कहते हैं। मेरा स्वयं का कोड इस डीएलएल से वस्तुओं को बनाता है और इन वस्तुओं पर विधियों को कॉल करता है।डीबगिंग करते समय पीडीबी मुझे क्या प्राप्त करता है और मुझे कैसे पता चलेगा कि यह काम कर रहा है?

CorpObject o = new CorpObject(); 
Int32 result = o.DoSomethingLousy(); 

डीबगिंग करते समय, विधि 'DoSomethingLousy' एक अपवाद फेंकता है। पीडीबी फाइल मेरे लिए क्या करती है? अगर यह कुछ अच्छा करता है, तो मैं कैसे सुनिश्चित कर सकता हूं कि मैं इसका उपयोग कर रहा हूं?

उत्तर

6

यह पुष्टि करने के लिए कि क्या आप प्रदत्त पीडीबी का उपयोग कर रहे हैं, CorporateComponent.pdb, विजुअल स्टूडियो आईडीई के भीतर डिबगिंग के दौरान आउटपुट विंडो की समीक्षा करें और लाइन का पता लगाएं यह दर्शाता है कि CorporateComponent.dll लोड किया गया है और स्ट्रिंग Symbols loaded द्वारा पीछा किया गया है।

मेरा एक परियोजना से उदाहरण देकर स्पष्ट करने के लिए:

The thread 0x6a0 has exited with code 0 (0x0). 
The thread 0x1f78 has exited with code 0 (0x0). 
'AvayaConfigurationService.vshost.exe' (Managed): Loaded 'C:\Development\Src\trunk\ntity\AvayaConfigurationService\AvayaConfigurationService\bin\Debug \AvayaConfigurationService.exe', Symbols loaded. 
'AvayaConfigurationService.vshost.exe' (Managed): Loaded 'C:\Development\Src\trunk\ntity\AvayaConfigurationService\AvayaConfigurationService\bin\Debug\IPOConfigService.dll', No symbols loaded. 

Loaded 'C:\Development\src...\bin\Debug\AvayaConfigurationService.exe', Symbols loaded.

यह बताता है कि PDB पाया और आईडीई डिबगर द्वारा लोड किया गया था।

जैसा कि दूसरों द्वारा इंगित किया गया है आपके आवेदन के भीतर स्टैक फ्रेम की जांच करते समय आपको कॉर्पोरेट कॉम्पोनेंट.pdb से प्रतीकों को देखने में सक्षम होना चाहिए। यदि आप नहीं करते हैं तो शायद तीसरे पक्ष में रिलीज पीडीबी बिल्ड में प्रतीक जानकारी शामिल नहीं थी।

4

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

0

पीडीबी से प्राप्त मुख्य भाग लाइन संख्याओं और स्टैक निशान के लिए वास्तविक विधि नाम है।

5

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

मैं दो उपयोग उदाहरण दूंगा। पहला स्पष्ट जवाब है। दूसरा स्रोत-अनुक्रमित पीडीबी बताता है।

1 के उपयोग का उदाहरण ...

सम्मेलन बुला और जो के आधार पर इस्तेमाल किया संकलक अनुकूलन, यह संभव के लिए डिबगर मैन्युअल रूप से एक मॉड्यूल जिसके लिए आप एक pdb की जरूरत नहीं है के माध्यम से स्टैक करने के लिए नहीं हो सकता है। यह कुछ तृतीय पक्ष पुस्तकालयों और यहां तक ​​कि ओएस के कुछ हिस्सों के लिए भी हो सकता है।

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

2 के उपयोग का उदाहरण (और एक 3 पार्टी पुस्तकालय के अंदर या यहां तक ​​कि अपने खुद के कोड के अंदर ए वी के लिए इसी तरह के उदाहरण) ...

PDB के एक और बहुत उपयोगी संपत्ति है - वे कुछ स्रोत नियंत्रण प्रणाली का उपयोग कर के साथ एकीकृत कर सकते हैं एक सुविधा है कि माइक्रोसॉफ्ट "स्रोत अनुक्रमण" कहते हैं। स्रोत-अनुक्रमित पीडीबी में स्रोत नियंत्रण कमांड होते हैं जो निर्दिष्ट करते हैं कि स्रोत नियंत्रण से घटक को बनाने के लिए उपयोग किए जाने वाले सटीक फ़ाइल संस्करणों को कैसे प्राप्त किया जाए। माइक्रोसॉफ्ट के डिबगर्स समझते हैं कि डीबग सत्र के दौरान फ़ाइलों को स्वचालित रूप से लाने के लिए आदेशों को कैसे निष्पादित किया जाए। यह एक शक्तिशाली विशेषता है जो डीबग egineer को किसी दिए गए निर्माण के लिए सही लेबल पर स्रोत पेड़ को मैन्युअल रूप से सिंक करने से बचाती है। यह रिमोट डीबगिंग सत्रों के लिए और क्रैश डंप पोस्ट-मॉर्टम का विश्लेषण करने के लिए विशेष रूप से उपयोगी है।

"विंडोज़ के लिए डीबगिंग टूल्स" इंस्टॉलेशन (विंडबग) में srcsrv.doc नामक एक दस्तावेज़ शामिल है जो एक उदाहरण प्रदान करता है कि यह निर्धारित करने के लिए कि srctool.exe का उपयोग कैसे किया जाए, यह निर्धारित करने के लिए कि कौन सी स्रोत फाइलें किसी दिए गए पीडीबी में स्रोत-अनुक्रमित हैं।

अपने प्रश्न का उत्तर देने के लिए "मुझे कैसे पता चलेगा", डीबगर में "मॉड्यूल" सुविधा आपको बता सकती है कि कौन से मॉड्यूल में संबंधित पीडीबी है। विंडबग में "एलएमएल" कमांड का उपयोग करें। दृश्य स्टूडियो में डीबग मेनू में कहीं से मॉड्यूल का चयन करें।(क्षमा करें, मेरे पास विजुअल स्टूडियो का वर्तमान संस्करण आसान नहीं है)

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