2009-05-16 13 views
6

के कारण लोड नहीं होते हैं मेरे पास मूल निवासी डीएल है जो प्रतीकों के साथ बनाया गया है। एक पोस्ट बिल्ड चरण है जो डीएलएल को संशोधित करता है। पोस्ट बिल्ड चरण कुछ संपीड़न करता है और शायद कुछ डेटा जोड़ता है। पीडीबी फ़ाइल अभी भी मान्य है हालांकि पोस्ट बिल्ड चरण के बाद न तो WinDbg और न ही विजुअल स्टूडियो 2008 डीएल के लिए प्रतीकों को लोड करेगा। पीडीबी फाइल या डीएल में क्या बिट्स हमें WinDbg या विजुअल स्टूडियो को प्रतीक लोड करने के लिए संशोधित करने की आवश्यकता है जब यह हमारे डंप को संदर्भित करता है जिसमें डंप लोड होता है?देशी बिल्ड के लिए प्रतीकों (पीडीबी) पोस्ट बिल्ड चरण

क्या यह फाइलसाइज है जो मायने रखता है? एक चेकसम या हैश? एक टाइमस्टैम्प?

डंप संशोधित करें? या पीडीबी संशोधित करें? भेजने से पहले डीएलएल को संशोधित करें?

(हम जानते हैं कि पीडीबी मान्य है क्योंकि हम इसे डंप कॉलस्टैक्स में पते के लिए मैन्युअल रूप से प्रतीकों के नाम प्राप्त करने में सक्षम हैं जो रिलीज डीएल का संदर्भ देता है। यह केवल हर दर्द के लिए हाथों में यह दर्द है सभी धागे में कॉलस्टैक में।)

उत्तर

11

This post ने मुझे chkmatch पर ले जाया। संसाधित dll पर, chkmatch यह जानकारी दिखाता है:

 
Executable: 
TimeDateStamp: 4a086937 
Debug info: 2 (CodeView) 
TimeStamp: 4a086937 Characteristics: 0 MajorVer: 0 MinorVer: 0 
Size: 123 RVA: 00380460 FileOffset: 00380460 
CodeView format: RSDS 
Signature: (my guid) Age: 19 
PdbFile: (my path) 

Debug information file: 
Format: PDB 7.00 
Signature: (my matching guid) Age: 19 

मैं dll के दोनों संस्करणों को खोल दिया और के लिए गया था:

 
Executable: 
TimeDateStamp: 4a086937 
Debug info: 2 (CodeView) 
TimeStamp: 4a086937 Characteristics: 0 MajorVer: 0 MinorVer: 0 
Size: 123 RVA: 00380460 FileOffset: 00380460 
CodeView signature: sUar 

Debug information file: 
Format: PDB 7.00 
Result: unmatched (reason: incompatible debug information formats) 
पूर्व संसाधित dll के खिलाफ एक ही pdb साथ

, यह इस रिपोर्ट ऑफसेट 00380460. मूल संस्करण में, पर्याप्त स्पष्ट करें कि मैं पीडीबी का नाम देखता हूं, लेकिन बाद में संसाधित संस्करण में उस ऑफसेट पर कोई पीडीबी जानकारी नहीं है। मैंने पीडीबी पथ की खोज की और सटीक उसी ब्लॉक को पाया - बस एक अलग ऑफसेट पर। तब मैंने मूल डीएल में बाइट्स "38 00 60 04" के लिए बिन खोज की। संसाधित डीएलएल में एक ही ऑफसेट को देखते हुए, मुझे वही बाइट्स मिला। तो मैंने आरवीए और ऑफसेट को समायोजित किया (बाइट्स से मिलान करके स्थित)। बिंगो! अब chkmatch संसाधित डीएल के मूल के रूप में सटीक उसी परिणाम की रिपोर्ट करता है (आरवीए और फ़ाइल ऑफसेट से जो मैंने बदला है)।

संपादित करें: पुष्टि की गई, अब विजुअल स्टूडियो संसाधित डीएलएल का संदर्भ देने वाले डंप के प्रतीक को लोड करता है।

+0

+1: इस तरह के विस्तृत विवरण के साथ वापस आने के लिए धन्यवाद। – RichieHindle

2

विंडबग में .symopt +40 का उपयोग करने का प्रयास करें, यह पीडीबी लोड करने के लिए मजबूर होगा।

+0

मूल संसाधित डीएल के साथ प्रयास किया लेकिन इससे इस मामले में कोई फर्क नहीं पड़ता - मुझे संदेह है क्योंकि पोस्ट बिल्ड चरण के बाद आरवीए और फाइलऑफसेट बस सादे गलत थे। –