2009-05-11 15 views
6

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

हम रिहाई आवेदन निर्माण में डिबग पुस्तकालय लेकर गलतियों बना रहे हैं।

मैं एक सुरुचिपूर्ण तरीका ढूंढ रहा हूं जिसमें मैं एक मॉड्यूल लिख सकता हूं जिसमें हम जांच सकते हैं कि कोई विशेष लाइब्रेरी रिलीज़ या डीबग है या मेल नहीं खाती है तो इसकी रिपोर्ट करें। हमारा आवेदन सी ​​/ सी ++ में लिखा गया है। (प्लेटफ़ॉर्म एमएसवीसी & जीसीसी)

+1

आप को जोड़ने के लिए जो toolchain और मंच का उपयोग कर रहे चाहते हो सकता है, उदाहरण के लिए एमएसवीसी, जीसीसी? –

+0

क्या पुस्तकालयों में/संकेतक में कुछ प्रकार का संकेतक है जो इंगित करता है कि वे रिलीज़ या डिबग बिल्ड हैं या नहीं? –

उत्तर

2

सामान्य दृष्टिकोण पुस्तकालयों को अलग-अलग नाम देने या उन्हें विभिन्न निर्देशिकाओं जैसे डीबग और रिलीज में स्टोर करने के लिए ईथर है। और यदि आपका निर्माण सही ढंग से स्वचालित है, तो मैं नहीं देख सकता कि आप गलतियां कैसे कर सकते हैं।

+0

मान लें कि आपको पुस्तकालयों का एक गुच्छा विरासत में मिला है और आप नहीं जानते कि वे कैसे बने हैं। उन्हें जोड़ने और विफलताओं की प्रतीक्षा करने का छोटा सा पता लगाने का कोई तरीका है? – stu

2

क्या आप नामकरण सम्मेलनों (यानी foo_rel.a और foo_dbg.a) का उपयोग करके इसे हल नहीं कर सकते हैं?

0

आम तौर पर एक एक अलग नाम का उपयोग संस्करणों भेद होगा। मिसाल के तहत उदाहरण के लिए सभी पुस्तकालयों को उनके विस्तार से पहले एक चरित्र 'डी' के साथ प्रत्ययित किया जाता है। पूर्व। commonUtilsd.lib रिलीज मोड के तहत यह commonUtils.lib होगा। यह दृष्टिकोण आईएमएचओ सरल और क्लीनर है। MSVC में उपयोग

Librarian-->General-->Output File 

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

1

अलग सम्मेलनों नामकरण, यदि आप एक यूनिक्स की तरह सिस्टम पर कर रहे हैं, तो आप शायद के उत्पादन में पार्स कर सकते हैं:

objdump -g mylib.a 

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

ध्यान दें कि इसका मतलब यह नहीं है कि पुस्तकालय "रिलीज" या "डीबग" है, लेकिन आपके मामले में इसका मतलब हो सकता है।

4

हां। आप फ़ाइल के IMAGE_FILE_HEADER संरचना के Characteristics फ़ील्ड को देख सकते हैं। यदि पुस्तकालय एक रिलीज बिल्ड है, तो बिट 0x0200 (DEBUG_STRIPPED) सेट किया जाएगा; डीबग बिल्ड पर, यह स्पष्ट होगा।

आप नेट एक्स (जैसे here) पर विभिन्न स्थानों पर उस संरचना को पुनर्प्राप्त करने के तरीके को देखने के लिए, विंडोज एक्सईएस और डीएलएल द्वारा उपयोग किए गए पीई प्रारूप पर तकनीकी जानकारी पा सकते हैं।

+0

यदि डीबीयूजी प्रतीक पीडीबी में हैं तो मैं DEBUG और रिलीज के बीच अंतर नहीं कर सकता। मैंने डीबग में एक सी ++ डीएल संकलित किया (डीबग प्रतीकों को पीडीबी से हटा दिया गया है) और रिलीज मोड और DEBUG_STRIPPED बिट इसे अलग नहीं कर सकता है। – qub1n

1

कैसे एक साधारण समारोह जो पुस्तकालय के संस्करण रिटर्न होने के बारे में? डीबग या रिलीज होने के आधार पर अलग-अलग चीजें लौटें। अपने ऐप की शुरुआत में उस फ़ंक्शन को कॉल करें और त्रुटि की रिपोर्ट करें।

+0

सुझाए गए सभी अन्य कचरे से बहुत आसान है। –

+0

हाँ, अच्छा सुझाव – Manoj

0

मैं का उपयोग करें और सफलतापूर्वक इस कोड का परीक्षण किया:

using System.Diagnostics; 

FileVersionInfo fvi = FileVersionInfo.GetVersionInfo(fileName); 
return fvi.IsDebug; 
+0

इस के लिए एक कमांड लाइन/gui उपकरण है? – stu

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