दृश्य स्टूडियो में बाहरी वर्ग के पुस्तकालय प्रोजेक्ट को कैसे डीबग करें?


137

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

मुझे अभी तक यह समझ में नहीं आया है कि प्रोजेक्ट ए से प्रोग्राम को चलाने के दौरान मैं बी से क्लास लाइब्रेरी को कैसे डिबेट कर सकता हूँ?

अग्रिम में धन्यवाद।

जवाबों:


202

जस्ट माई कोड (JMC) को अक्षम करने का प्रयास करें।

  • उपकरण -> विकल्प -> डिबगर
  • "मेरे कोड को सक्षम करें" को अनचेक करें

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

संपादित करें

जब आप अपने कोड में टूट जाते हैं तो निम्नलिखित प्रयास करें।

  • डीबग -> विंडोज -> मॉड्यूल
  • जिस प्रोजेक्ट में आपकी रुचि है, उसके लिए DLL खोजें
  • राइट क्लिक -> लोड सिंबल -> अपने अन्य प्रोजेक्ट के लिए .PDB के लिए पथ का चयन करें

2
विशिष्ट चेकबॉक्स पहले से ही अनियंत्रित था। हालांकि मैंने जो देखा, वह यह है कि यह बाहरी पुस्तकालय की एक विधि में प्रवेश करता है, लेकिन जब मैं एक इंटरफ़ेस का हिस्सा है, तो एक विधि को कॉल करने का प्रयास करता हूं।
Konstantinos

आपको DLL के गुणों में जाने की आवश्यकता हो सकती है, और यह सुनिश्चित करें कि कॉपी लोकल ट्रू पर सेट हो। अन्यथा, मॉड्यूल आपके संदर्भ के लिए .pdb खोजने में सक्षम नहीं होंगे।
ब्रायन रेनर

जस्ट माय कोड से कोई फ़र्क नहीं पड़ता (मैं सक्षम होने पर भी बाहरी कोड में कूद सकता हूं), लेकिन डीबगर में मॉड्यूल खोजने से मदद मिलती है।
TheOperator

3
इस फ़ोल्डर में एक मिलान प्रतीक फ़ाइल नहीं मिली।
क्रिस्टीन

1
यदि आपके पास संदर्भित मॉड्यूल के लिए PDB फाइलें नहीं हैं, तो ReSharper को डीबग / विंडोज / मॉड्यूल में राइट-क्लिक मेनू में "लोड प्रतीक के साथ ReSharper Deecompiler के साथ लोड" विकल्प का उपयोग करके विघटित करने के लिए इस्तेमाल किया जा सकता है। बहुत शक्तिशाली।
१ast

12

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


10

का रास्ता मान लिया

परियोजना A

C:\Projects\ProjectA

परियोजना B

C:\Projects\ProjectB

और ProjectB की dll में है

C:\Projects\ProjectB\bin\Debug\

में डिबग करने के लिए ProjectBसे ProjectA, निम्न कार्य करें

  1. कॉपी Bकी dll साथ dll के .PDBलिए ProjectAके संकलन निर्देशिका।
  2. अब डिबग करें ProjectA। जब कोड उस हिस्से तक पहुँच जाता है जहाँ डीबग करते समय आपको dll की विधि या घटनाओं आदि को कॉल करने की आवश्यकता होती है, F11तो dll के कोड में जाने के लिए दबाएँ ।

नोट: .PDB फ़ाइल को कॉपी करने के लिए नहीं है


5

मैं दृश्य स्टूडियो के दो उदाहरण चलाता हूं - एक बाहरी डीएल के लिए और एक मुख्य एप्लिकेशन के लिए।
बाहरी dll के प्रोजेक्ट गुणों में, निम्न सेट करें:

घटनाएँ बनाएँ:

  • copy /y "$(TargetDir)$(TargetName).dll" "C:\<path-to-main> \bin\$(ConfigurationName)\$(TargetName).dll"

  • copy /y "$(TargetDir)$(TargetName).pdb" "C:\<path-to-main> \bin\$(ConfigurationName)\$(TargetName).pdb"

डीबग:

  • बाहरी कार्यक्रम शुरू करें: C:\<path-to-main>\bin\debug\<AppName>.exe

  • कार्यकारी डाइरेक्टरी C:\<path-to-main>\bin\debug

इस तरह, जब भी मैं बाहरी dll का निर्माण करता हूं, यह मुख्य एप्लिकेशन की निर्देशिका में अपडेट हो जाता है। अगर मैं बाहरी dll के प्रोजेक्ट से डीबग मारता हूं - मुख्य एप्लिकेशन चलता है, लेकिन डिबगर केवल बाहरी dll में ब्रेकप्वाइंट को हिट करता है। यदि मैं मुख्य परियोजना से डिबग को हिट करता हूं, तो मुख्य एप्लिकेशन सबसे हाल ही में निर्मित बाहरी डीएल के साथ चलता है, लेकिन अब डिबगर केवल मुख्य परियोजना में ब्रेकप्वाइंट को हिट करता है।

मुझे लगता है कि एक डिबगर दोनों के लिए काम करेगा, लेकिन मुझे दोनों को इस तरह सीधा रखना आसान लगता है।


1

[मार्टिन बेकेट के अनुसार, वह व्यक्ति जो मुझे यह उत्तर भेजता है]

आप बाहरी लाइब्रेरी में डीबग कर सकते हैं।

प्रोजेक्ट सेटिंग में 'सोर्स कोड' फ़ील्ड में 'विज़ुअल स्टूडियो डायरेक्ट्रीज़' के लिए टैब लुक में ओपनसीवी स्रोतों के लिए रास्ता शामिल है। फिर सुनिश्चित करें कि डीबग dll में से प्रत्येक के लिए .pdb फ़ाइलें dll के समान निर्देशिका में हैं।


0

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

विज़ुअल स्टूडियो को आपको बाहरी लाइब्रेरी में डिबग करने की अनुमति देनी चाहिए।


0

नुगेट संदर्भ

मान लें कि -Project_A (Project_a.dll का निर्माण करता है) -Project_B (Project_b.dll का निर्माण करता है) और Project_A के लिए Project_A को NuGet पैकेज द्वारा संदर्भित करता है, फिर प्रोजेक्ट Project_a.dll, project_a.pdb को फ़ोल्डर Project_B / पैकेज में कॉपी करें। प्रभाव में / बिन में कॉपी किया जाना चाहिए।

अब Project_A डीबग करें। जब कोड डिबगिंग के दौरान उस हिस्से तक पहुंच जाता है, जहां आपको dll की विधि या ईवेंट आदि को कॉल करने की आवश्यकता होती है, तो F11 को dll के कोड में जाने के लिए दबाएं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.