2010-11-09 12 views
7

पर क्रैश होने पर एक सी # निष्पादन योग्य डिबगिंग मैं एक सी # प्रोग्राम को दूरस्थ रूप से डीबग करने का प्रयास कर रहा हूं। होस्ट से कनेक्ट करना समस्या नहीं है और मैं उस मशीन पर चलने पर सभी प्रक्रियाओं को देख सकता हूं, और msvsmon.exe से कनेक्ट कर सकता हूं।लॉन्च

हालांकि, प्रोग्राम मैं लॉन्च पर तुरंत क्रैश डीबग करना चाहता हूं, मुझे खुद को संलग्न करने का कोई समय नहीं दे रहा है। रिमोट लोकेशन के माध्यम से प्रश्न में निष्पादन योग्य डीबग लॉन्च करना कुछ भी नहीं करता है। क्रैश से पहले मैं डीबगर कैसे संलग्न कर सकता हूं?

उत्तर

10

लॉन्च पर क्रैशिंग अनुपलब्ध निर्भरता के कारण हो सकती है। अपना आवेदन शुरू करने से पहले fuslogvw.exe चलाएं और देखें कि बाध्यकारी परिचालन में से कोई भी असफल रहा है या नहीं।

यदि यह मदद नहीं करता है, तो आमतौर पर नैदानिक ​​लॉगिंग करने के लिए यह एक अच्छा अभ्यास है। आप समर्पित लॉगिंग लाइब्रेरी का उपयोग कर सकते हैं, उदा। log4net, या कम से कम आपको System.Diagnostics.Trace के माध्यम से लॉगिंग का सबसे सरल रूप उपयोग करना चाहिए। आप app.config में ट्रेस श्रोता को कॉन्फ़िगर करके या डिबगर या डीबग व्यू से Sysinternals से तीसरे पक्ष के टूल का उपयोग करके ट्रेस संदेशों को सुन सकते हैं।

आप एक ब्रेकपाइंट प्रोग्राम के रूप में सम्मिलित कर सकते हैं आप वास्तव में एक डिबगर संलग्न करने के लिए करना चाहते हैं:

System.Diagnostics.Debugger.Break(); 

मैं जाँच नहीं की है कि यह कैसे एक दूरस्थ डीबगर के साथ काम करता है, लेकिन एक अंतिम उपाय के रूप में आप अपने आवेदन नींद हो सकता है काफी देर तक आप एक डिबगर संलग्न करने के लिए अनुमति देने के लिए:

System.Threading.Thread.Sleep(30000); 
+0

+1 डीबग व्यू मेरे एफएवी टूल्स में से एक है। – kenny

0

अंततः ज्यादा के बाद चारों ओर से खुदाई मुझे एहसास हुआ कि WPF समस्या का कारण था। रूडसेन का ब्लॉग answer.

एप्लिकेशन लॉग में निम्न त्रुटि होगी;

नेट रनटाइम 4.0 रिपोर्टिंग त्रुटि

EventType clr20r3, P1 eobfrontend.exe, P2 1.0.0.0, पी 3 4cd95cc7, पी 4 presentationframework, पी 5 4.0.0.0, पी 6 4ba1f8db, P7 78ff, P8 0, पी 9 प्रणाली। windows.markup.xamlparse, पी 10 शून्य।

रुडसेन के रूप में समझा गया "त्रुटि का मतलब है कि xaml कोड को पार्स करने में रनटाइम त्रुटि थी"। मैं "ओपन डीबग> अपवादों" के रूप में उल्लिखित चरणों का पालन करता हूं और "सामान्य भाषा रनटाइम अपवाद" के लिए "फेंक दिया गया" कॉलम में चेकबॉक्स को सक्रिय करता हूं। ऐसा हुआ, विजुअल स्टूडियो सभी अपवादों पर रोक लगाएगा। "

13

प्रोग्राम लॉन्च में डीबगर को जोड़ने के लिए मेरी पसंदीदा चालों में से एक Image File Execution Options का उपयोग कर रहा है। यह एक रजिस्ट्री सुविधा है जो आपको अन्य चीजों के साथ, इसके निष्पादन से पहले किसी एप्लिकेशन को डीबगर संलग्न करती है। वही चाल, उदाहरण के लिए, Process Explorer, या Notepad.exeNotepad2 के साथ अपने विंडोज टास्क मैनेजर को प्रतिस्थापित कर सकती है।

आप इसके बारे में सब कुछ पढ़ सकते हैं here

  • भागो regedit.exe
  • जाओ HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options
  • करने के लिए अपने exe के रूप में नामित एक नई कुंजी बनाएँ (उदाहरण:: yourprogram.exe)
  • एक नया बनाएं

    यहाँ कैसे आप इसे सेट अप है अपने exe के तहत स्ट्रिंग मूल्य। स्ट्रिंग मान के नाम Debugger है, और मूल्य vsjitdebugger.exe

जब आप निष्पादन योग्य चलाने के लिए, आप एक डिबगर चयन करने के लिए आप पूछ देखेंगे बस समय प्रॉम्प्ट में है:

vsjitdebugger

हालांकि यह संवाद खुला है, अपनी प्रक्रिया में दूरस्थ रूप से संलग्न करें, और संवाद पर No दबाएं।

उम्मीद है कि मदद करता है।

+1

क्रिकी, यह बहुत उपयोगी है। यह नहीं पता था कि यह किया जा सकता है। – wonea

+1

GFlags माइक्रोसॉफ्ट का एक मुफ्त टूल है जो आपके लिए रजिस्ट्री में इस विकल्प को सेट करेगा, साथ ही साथ कई अन्य उपयोगी डिबगिंग विकल्प भी सेट करेगा। यह http://msdn.microsoft.com/en-us/windows/hardware/gg463009.aspx पर मुफ्त में उपलब्ध है, जब आप किसी प्रोग्राम या सेवा पर चलने पर हर बार चलाने के लिए डीबगर सेट करने की आवश्यकता होती है तो यह उपयोग करने योग्य है। प्रणाली। – StarPilot

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