2008-10-09 11 views
6

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

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

किसी को VisualC से अपरिचित किसी के लिए सरल चरणों का उपयोग करके, किसी भी डीएलएल में अभी भी डिबगिंग जानकारी और इसे कैसे पट्टी करना है, यह निर्धारित करने के लिए कोई व्याख्या कर सकता है?

उत्तर

3

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

यह निर्धारित करने के लिए कि आपके पास किस प्रकार का डीएलएल है, आप यह देखने के लिए Dependency Walker का उपयोग कर सकते हैं कि आपका DLL डीबग या रिलीज़ संस्करण से जुड़ा हुआ है या नहीं वीसी रनटाइम लाइब्रेरी (मान लीजिए कि उन पुस्तकालयों को स्थिर रूप से लिंक नहीं किया गया है।)

5

आम तौर पर डीबग जानकारी स्वयं को यूनिक्स में बाइनरी में जोड़ने के बजाय अलग *.pdb फ़ाइल (प्रोग्राम डेटाबेस) के रूप में बनाया गया है। यदि डेवलपर्स वास्तव में लाइब्रेरी का डीबग संस्करण बनाते हैं, तो निर्भरता की एक और गंभीर समस्या हो सकती है। यदि MSVCRT.DLL पर बाइनरी लिंक का रिलीज़ संस्करण है, तो डीबग बिल्ड MSVCRTD.DLL से लिंक होगा (अन्य रनटाइम लाइब्रेरीज़ को समान रूप से डी प्रत्यय के साथ नामित किया जाता है)। एक विशेष द्विआधारी के लिए निर्भरता को खोजने के लिए प्रयास करें:

dumpbin /imports whatever.dll 

इस पुस्तकालय whatever.dll के लिए सभी क्रम निर्भरता दिखाई देगा (ध्यान दें कि उन पुस्तकालयों से दोनों पुस्तकालय के नाम और प्रतीकों सूचीबद्ध होते हैं)। यदि आप अपेक्षाओं की निर्भरताओं की सूची नहीं देखते हैं, तो शायद एक समस्या है जिसे केवल मूल डेवलपर को उचित निर्माण मोड में लाइब्रेरी का पुनर्निर्माण करके तय किया जा सकता है।

5

रीबेस माइक्रोसॉफ्ट टूलसेट का हिस्सा है। डीएलएस के लिए बेस एड्रेस सेट करने के अलावा यह किसी भी संलग्न डीबग जानकारी को एक अलग .dbg फ़ाइल में पट्टी कर सकता है।

रिबेस मैं 0x10000000 -एक -x। \ -p

आप सैद्धांतिक रूप से कोशिश करते हैं और यह निर्धारित करते हैं dll पहले से ही एक अनूठा आधार पते पर बनाने जा रहा है और उस का उपयोग करना चाहिए। वैकल्पिक रूप से, अपने आवेदन द्वारा उपयोग किए जाने वाले किसी भी अन्य डीएलएस के साथ टकराव की संभावना को कम करने के लिए आधार पता चुनें ताकि विंडोज़ लोड होने पर डीएल को पैच नहीं करना पड़े। एक ऐसी उम्र में जहां लोडर नियमित रूप से सुरक्षा सुविधाओं के रूप में मॉड्यूल के लोड पते को यादृच्छिक रूप से यादृच्छिक रूप से याद करते हैं, मुझे यकीन नहीं है कि इसके आधार पर बेस पता को विशेष रूप से स्थापित करने के लिए परेशानी है।

2

निर्भरता वॉकर निर्भरता दिखाता है लेकिन यह नहीं कि डिबगिंग जानकारी छीन ली गई है या नहीं। दोनों को देखने के लिए PeStudio का उपयोग करें।

0

इस समय के लिए अन्य रिलीज संस्करण जैसे कि रिलीज संस्करण प्राप्त करने के लिए अनदेखा करना मान्य है। डेवलपर्स जो उपकरण खोज रहे हैं वह वास्तव में विजुअल स्टूडियो (या एसडीके या डब्लूडीके) से link.exe है।

वे आप अपने कोड के साथ एक साथ एक डिबगर का उपयोग करने के वे आप के लिए सार्वजनिक PDB फ़ाइलें बना सकते हैं सक्षम होने के लिए चाहते हैं, तो। वे विकल्प जो वे उपयोग करना चाहते हैं वे हैं:

/PDB:filename 
    /PDBSTRIPPED:filename 

हालांकि, मुझे डर है कि आप इसके बारे में बहुत कुछ नहीं कर सकते हैं। PDB फ़ाइलें खुद को अलग फ़ाइलों कर रहे हैं और डिबग जानकारी आम तौर पर (आधुनिक एमएस compilers पर बाइनरी में शामिल नहीं किया है, हालांकि कुछ RTTI सामान शामिल हो सकता है, ASSERT के लिए फ़ाइल नाम और तार और इसी तरह के मैक्रो और "कार्यों" का उल्लेख नहीं - जो कथित ब्लोट के लिए सबसे अधिक संभावित स्पष्टीकरण है)।

नोट: डब्लूडीके से binplace.exe उपरोक्त झंडे के समान कार्यक्षमता प्रदान करता है, लेकिन कुछ हद तक अधिक मजबूत है (हालांकि डब्लूडीके बिल्ड प्रक्रिया के लिए फिटिंग) सिंटैक्स।

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