2012-12-21 36 views
5

में लाइब्रेरी के रिलीज़ संस्करण को डीबग करने के लिए मुझे अपनी लिंक्ड लाइब्रेरी के रिलीज़ संस्करण को डीबग करने की आवश्यकता है। मैं पहले से ही अपने रिलीज बिल्ड के साथ डीबग जानकारी उत्पन्न कर रहा हूं इस article के बाद, लेकिन मैं लाइब्रेरी प्रोजेक्ट के साथ ऐसा कैसे कर सकता हूं? ध्यान दें कि लाइब्रेरी प्रोजेक्ट में गुणों में लिंक पेज नहीं है जहां उपरोक्त लिंक में डीबग जानकारी बनाई गई है। मैं वीएस -2010 का उपयोग कर रहा हूँ।विजुअल स्टूडियो

जो मैं वास्तव में चाहता हूं वह है कि लाइब्रेरी कार्य को लाइब्रेरी डीबग करने के लिए काम करना है। मैंने रिलीज एक्सई के साथ लाइब्रेरी के डीबग संस्करण को लिंक करने का प्रयास किया लेकिन यह लिंकर त्रुटियों को बनाता है।

+1

क्या आप एक स्थिर पुस्तकालय या डीएलएल के बारे में बात कर रहे हैं? –

+0

@ जेरीकॉफिन यह स्थिर पुस्तकालय कोई डीएलएल नहीं है। – zar

+0

आप किस प्रकार का एप्लिकेशन चला रहे हैं? – makc

उत्तर

2

क्या मैं सच में चाहते ट्रेस काम करने के लिए है ...

आप MFC ट्रेस मैक्रो मतलब है? वह जो डीबगर की डीबग/आउटपुट विंडो में संदेश लिखता है?

दुर्भाग्यवश, भले ही आप अपनी बिल्ड सेटिंग्स को ठीक करते हैं, ताकि आपके अंतिम निष्पादन योग्य में आपकी स्थिर लाइब्रेरी के लिए डीबग जानकारी हो, यह उन ट्रेस स्टेटमेंट को वापस नहीं लाएगा। ट्रेक एक मैक्रो है और इसलिए संकलक प्रीप्रोसेसर द्वारा संभाला जाता है। जब आप रिलीज मोड में संकलित करते हैं, तो उस मैक्रो को नो-ऑप होने के लिए फिर से परिभाषित किया जाता है। ऐसा लगता है जैसे स्रोत कोड से TRACE कथन हटा दिया गया था।

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

तो क्या करना है? बाहर निकलता है, अगर आप उन मैक्रोज़ में काफी गहराई से खुदाई करते हैं, तो वे आखिरकार Win32 फ़ंक्शन OutputDebugString पर कॉल कर रहे हैं। यह कॉल एमएस पुस्तकालयों के डीबग और रिलीज संस्करण दोनों में उपलब्ध है। तो ... आप आउटपुटडिबगस्ट्रिंग को स्पष्ट कॉल के साथ ट्रेस मैक्रोज़ को प्रतिस्थापित कर सकते हैं - यह कोड के साथ सुविधाजनक नहीं है लेकिन कम से कम आपको रिलीज मोड में अपना डीबग आउटपुट मिल जाएगा।

बीटीडब्ल्यू, मैंने अंततः उन सभी मैक्रोज़ को छोड़ दिया और हमने उन्हें log4cplus कॉल के साथ पूरी तरह से बदल दिया है। कोई भी लॉगिंग ढांचा ट्रेस मैक्रोज़ से बेहतर होगा - क्योंकि जब आपको वास्तव में ट्रेसिंग की आवश्यकता होती है तो वह तब नहीं होता जब आप डिबगिंग कर रहे हों, लेकिन जब आपका कोड उत्पादन में होता है और आप स्थानीय रूप से समस्या को पुन: पेश नहीं कर सकते हैं। एक फ़ाइल में लॉग इन करना बेहतर होता है जिसे ग्राहक आपको भेज सकता है, फिर ट्रेसिंग पर निर्भर करता है जो केवल डीबगर में काम करता है। किसी भी तरह से विचार करने के लिए ...

+0

+1 मैंने देखा था कि ट्रेक काम नहीं कर रहा था, आपके उत्तर में मदद मिली। – zar

1

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

तो मूल रूप से, डीबग जानकारी उत्पन्न करने के लिए बस कंपाइलर बताएं, और लाइब्रेरी में डीबग जानकारी होगी।

+0

+1 धन्यवाद, आप सही हैं, मैंने अनुकूलन अक्षम कर दिया है और मैं इसे डीबग करने में सक्षम था। इससे पहले भी मैं पहले कोड में डीबग/कदम करने में सक्षम था लेकिन घड़ी खिड़की के समय में फर्जी मूल्य दिखा रहा था। – zar