2009-04-17 6 views
5

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

मैं जानना चाहता हूं कि विंडोज़ सेवा प्रक्रियाओं, धागे इत्यादि के मामले में कैसे काम करती है ... और मैं शुरुआत से डीबगिंग कैसे शुरू कर सकता हूं? एक अलग वर्ग में सेवा कोड के कार्यात्मक भागों ... एक अलग पुस्तकालय विधानसभा में, तो फिर तुम स्वतंत्र रूप से एक सरल सांत्वना एप्लिकेशन का उपयोग करके यह डीबग कर सकते हैं ... -

+0

मेरी असली चुनौती है कि सेवा को चारों ओर कूदने से रोकें? क्या ऐसे धागे हैं जिन्हें मैं नहीं जानता? –

उत्तर

0

सरल दृष्टिकोण ...

व्यापार को

+0

यह एक उत्पादन अनुप्रयोग है और मैं इस समय स्रोत कोड नहीं बदल सकता। –

9

मुझे लगता है कि आप बात कर रहे हैं। बिल्कुल। मैंने हमेशा अपनी सेवाओं को डीबग करने के लिए निम्न कोड का उपयोग किया है। मैं इसे स्थानांतरित करता हूं जहां मैं लॉन्च करने के लिए डीबगर करना चाहता हूं। सेवा शुरू करें और यह स्वचालित रूप से विजुअल स्टूडियो लॉन्च करता है। मेरे लिए अच्छा काम करता है।

System.Diagnostics.Debugger.Launch();

System.Diagnostics.Debugger.Debug();

+0

प्रतिक्रिया के लिए धन्यवाद। हां, मैं .NET के बारे में बात कर रहा हूं और मैं यह देखने के लिए आपके निर्देश सेट को Google पर डालूंगा कि यह कैसे काम करेगा। –

+0

आप इस कोड का उपयोग डिबगिंग के लिए कर सकते हैं। लेकिन जब आप पूरा कर लें तो इसे बाद में निकालना न भूलें। किसी भी बदलाव के बाद आपको निश्चित रूप से सेवा को पुन: संकलित करने की आवश्यकता होगी। –

+0

मैं हमेशा System.Diagnostics.Debugger.Debug(); का उपयोग करता हूं, मैंने कॉन्फ़िगरेशन फ़ाइल "IsDebugging" में एक बूलियन कुंजी डाल दी है। इसलिए मैं डीबगर को किसी भी समय चालू या बंद करता हूं – Costa

2

बस प्रेस F5। आप विंडोज़ सेवाओं को नियमित रूप से ऐप की तरह चला सकते हैं।

चूंकि हमारे पास कोई अन्य कमांड लाइन तर्क नहीं है, इसलिए हम सामान्य विंडोज ऐप के रूप में चलाने के लिए सिग्नल के रूप में किसी भी कमांड-लाइन तर्क की प्रस्तुति का उपयोग करते हैं। आपको एक विशिष्ट कमांड लाइन तर्क (यानी/डीबग) की उपस्थिति की भी आवश्यकता हो सकती है।

If sArgs IsNot Nothing AndAlso sArgs.Length > 0 Then 
    ' If there are command-line args then run in non-service mode 
    Dim svc As ServiceMain = New ServiceMain(True) 
    svc.OnStart(Nothing) 
    System.Windows.Forms.Application.Run() 
    svc.OnStop() 
Else 
    ' If no command-line args then run normally 
    Dim ServicesToRun() As System.ServiceProcess.ServiceBase 
    ServicesToRun = New System.ServiceProcess.ServiceBase() {New ServiceMain(False)} 
    System.ServiceProcess.ServiceBase.Run(ServicesToRun) 
End If 
0

यह डीबगर में ब्रेकपॉइंट्स के रूप में सुविधाजनक नहीं है लेकिन मुझे एक साधारण लॉग फाइलों में लेखन आउटपुट में मदद मिलती है। हमारे पास ऐसी सेवाएं हैं जो काम करने और लॉग फ़ाइल में लिखने के लिए धागे को जन्म देती हैं जिससे समस्याओं को दूर करने में मदद मिली है।

1

आप "Image File Execution Options" का उपयोग कर सकते हैं और यह कॉन्फ़िगर कर सकते हैं कि प्रत्येक बार जब सेवा शुरू होती है तो यह एक डीबगर के अंदर शुरू हो जाएगी।
वह डीबगर WinDBG या विजुअल स्टूडियो हो सकता है।