5

सबसे पहले मुझे कहना है कि मैं कर सकते हैं दूरस्थ डिबग दूरस्थ कंप्यूटर पर एक रिहाई निर्माण। मैं set up my release build मेरी डीबग बिल्ड की तरह बहुत अधिक है लेकिन मुझे ज्यादातर यह सुनिश्चित करना था कि डीबग ध्वज सेट नहीं किया गया था। मैंने थोड़ी देर के लिए ऐसा करने का निपटाया है और आखिरकार कोशिश करने का फैसला किया कि मुझे इस माध्यम से क्यों जाना है। मुझे यह भी उल्लेख करना चाहिए कि मेरा रिमोट डीबगिंग अनुभव इस प्रोजेक्ट तक ही सीमित है और सी # प्रोग्राम कुछ महत्वपूर्ण सी ++ libs में मध्यस्थता करने के लिए डी + एल/सीएलआई (निर्मित/क्लियर) का उपयोग करता है। मुझे अंतर्निहित सी ++ libs को डीबग करने की आवश्यकता नहीं है लेकिन मुझे सी ++/सीएलआई कोड डीबग करने की आवश्यकता है। (एक कारण यह है कि मैं इसका उल्लेख करता हूं कि मैं/clr ध्वज का उपयोग करते समय स्थिर रूप से libs को लिंक नहीं कर सकता)।रिमोट सीआरटी का डीबग संस्करण के साथ एक ऐप्लिकेशन डिबगिंग जब वी.एस. रिमोट मशीन पर स्थापित नहीं है

मैंने हाल ही में Dependency Walker खोजा है, इसलिए मैंने यह देखने के लिए उपयोग किया कि क्या हो रहा था। डीबग फ्लैग सेट के साथ बाहर निकलता है, एमएसवीसीआर 100 डी.डीएलएल और एमएसवीसीपी 100 डी.डीएलएल में लिंकर लिंक, जब ध्वज सेट नहीं होता है तो यह "डी" प्रत्यय के बिना फ़ाइलों का उपयोग करता है। अब आम तौर पर मैं उन लोगों के अपने संस्करणों की प्रतिलिपि बना सकता हूं। डीएलएल रिमोट मशीन पर लेकिन एक समस्या है। वीएस -2010 के साथ मेरा देव लैपटॉप एक 64 बिट मशीन है और लक्ष्य मशीन 32 बिट है। इसका मतलब है कि मेरे पास उन डीएलएल का एकमात्र संस्करण 64 बिट है। मैंने रिमोट मशीन पर वीएस -2010 (मुझे 2008 के तहत भी यही समस्या थी) के लिए रिमोट डीबगिंग स्थापित किया है, लेकिन इसमें डीबीएलएल के डीबग संस्करण शामिल नहीं हैं (मुझे यकीन नहीं है कि क्यों, लेकिन मुझे लगता है कि यह है डिज़ाइन)। तो मेरे प्रश्न हैं:

  1. वीएस -2010 के एक पंजीकृत मालिक के रूप में इनमें से 32 बिट संस्करणों के लिए एक वैध स्रोत है। डीएलएल मैं रिमोट मशीन पर डाल सकता हूं?
  2. क्या मेरे लिए डीबग समर्थन प्राप्त करने का कोई आसान तरीका है? क्या मैं कुछ अन्य सेटिंग बदल सकता हूं जो वीएस को उन दो डीएलएल के डीबग संस्करण का उपयोग न करने के लिए कहता है? यहां लाभ यह है कि DEBUG प्रतीक सेट किया जाएगा और इसका उपयोग करने वाला कोई सशर्त कोड काम करेगा।

उत्तर

8

सीआरटी डीएलएल के डीबग संस्करण सभी मानक विजुअल स्टूडियो स्थापना के साथ उपलब्ध हैं, जिसमें 64-बिट मशीनों पर भी x86 संस्करण शामिल हैं।

डिफ़ॉल्ट रूप से, वे निम्नलिखित पथ में स्थित हैं:

<Program Files folder>\Microsoft Visual Studio 10.0\VC\redist\Debug_NonRedist 
उस फ़ोल्डर के तहत

, आप दो अतिरिक्त फ़ोल्डर (x64 और x86) कि संबंधित के लिए इन DLLs का डिबगिंग संस्करण शामिल मिल जाएगा प्लेटफार्मों।

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


, आप बदल सकते हैं जो CRT DLLs का संस्करण है जिसे दृश्य स्टूडियो परियोजना विशेष परियोजना के लिए करने के लिए लिंक विन्यास। इसका मतलब है कि आप अपने आवेदन के "डीबग" संस्करण को संकलित कर सकते हैं, लेकिन सीआरटी के पूर्ण पुनर्वितरण योग्य संस्करणों से लिंक करने के लिए विजुअल स्टूडियो को बताएं।

कि ऐसा करने के लिए:

  1. समाधान Explorer में अपनी परियोजना पर राइट क्लिक करें और "गुण" का चयन करें।

  2. सुनिश्चित करें कि "डीबग" कॉन्फ़िगरेशन को संवाद के शीर्ष पर ड्रॉप-डाउन बॉक्स में चुना गया है।

  3. ट्री व्यू में "सी/सी ++" आइटम का विस्तार करें, और "कोड जनरेशन" का चयन करें।

  4. "मल्टी-थ्रेडेड डीएलएल (/ एमडी)" या "मल्टी-थ्रेडेड (/ एमटी)" या तो "रनटाइम लाइब्रेरी" विकल्प की सेटिंग बदलें।

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

+0

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

+0

@ टोड: ज़रूर; आपका स्वागत है। वास्तव में यह साइट वास्तव में है। यह मेरे लिए एक अच्छा समाधान की तरह लगता है; मैंने उन परियोजनाओं पर किया है जहां स्थिर लिंकिंग काम नहीं करती है। (मैंने अभी देखा है कि मैंने आपके प्रश्न में उस हिस्से को याद किया जहां आपने समझाया कि आप स्थिर रूप से लिंक क्यों नहीं कर सकते हैं।) –

0

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

संपत्ति पन्नों में, Debugging, जब Debugger to launch संपत्ति सूची में Remote Windows Debugger के लिए सेट है, के तहत, वहाँ एक विकल्प Deploy Visual C++ Debug Runtime Libraries कहा जाता है। बस इसे Yes पर सेट करें। -

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

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

+0

क्या आप इस पर अधिक विशिष्ट हो सकते हैं? कौन सा संपत्ति पृष्ठ बिल्कुल? – skyline75489

+0

अपडेट किया गया। विंडो को ** <प्रोजेक्ट नेम> प्रॉपर्टी पेज ** कहा जाता है, जो कि सभी वर्णनात्मक नहीं हो सकता है, इसलिए मैं उस विंडो तक पहुंचने की सूची देता हूं। – McMustard