2012-09-14 19 views
13

मैं इस कोड का टुकड़ा मिला, लेकिन यह सच वापस नहीं करता है जब मैं डिबगिंग हूँ:क्या IsDebuggerPresent() के बराबर सी # # है?

[DllImport("kernel32.dll", CharSet=CharSet.Auto, ExactSpelling=true)] 
internal static extern bool IsDebuggerPresent(); 
+0

आप क्या करना चाहते हैं? –

+0

'#if डीबग' ??? – SpaceBison

+0

डीबगर में चलते समय केवल कुछ बटन दिखाएं। #if डीबग करेंगे! सी ++ में मैंने IsDebuggerPresent को प्राथमिकता दी क्योंकि यह डेवलपर इसे अलग-अलग देख रहा था या नहीं (रिलीज़ या डीबग में)। – noelicus

उत्तर

30

हाँ:

System.Diagnostics.Debugger.IsAttached 
+0

धन्यवाद - विश्वास नहीं कर सकता कि मुझे गुगलिंग के दौरान यह नहीं मिला! ... उम्मीद है कि यह प्रश्न और उत्तर उस समाधान को हल करेगा ;-) – noelicus

+1

सहायता करने में खुशी हुई, कृपया इसे सही के रूप में चिह्नित करें ताकि अन्य इसे आसानी से ढूंढ सकें – BugFinder

5

आप C# के रूप में अपने प्रश्न में चिह्नित इसलिए मैं जब यह सोचते कर रहा हूँ कह रही है "लेकिन जब मैं डिबगिंग कर रहा हूं तो यह सच नहीं होता है" आप वास्तव में प्रबंधित डिबगिंग के बारे में बात करते हैं।

IsDebuggerPresent() एक देशी डीबगर मौजूद होने के लिए फ़ंक्शन चेक। यदि आपके (प्रबंधित) डीबगर मौजूद है या नहीं, तो अपने मामले में आपको System.Diagnostics.Debugger.IsAttached का उपयोग करना चाहिए।

डीबगर API पर अधिक जानकारी के लिए this blog post का भी संदर्भ लें।

1

.नेट फ्रेमवर्क कि IsDebuggerPresent() जैसा दिखता है सबसे के सदस्य स्पष्ट रूप से Debugger.IsAttached है, लेकिन उनके आंतरिक कार्यप्रणाली सरल OutputDebugString से बहुत अलग ढंग सिर्फ काम करता है की तरह, पूरी तरह से अलग कर रहे हैं।

  • Debugger.IsAttached एक संलग्न कामयाब डिबगर की उपस्थिति के लिए CLR पूछता है, और यहां तक ​​कि एक देशी डिबगर की उपस्थिति की जांच करने के लिए परेशान नहीं किया।
  • IsDebuggerPresent() कर्नेल से संलग्न मूल डीबगर की उपस्थिति के लिए पूछता है, और प्रबंधित डिबगर्स का कोई ज्ञान नहीं है।

विजुअल स्टूडियो 2013 के अनुसार, प्रबंधित डिबगर एक देशी डिबगर के शीर्ष पर बनाया गया है, इसलिए दोनों IsDebuggerPresent() और Debugger.IsAttached सच लौट जाना चाहिए जब बनाम तहत एक कामयाब आवेदन डिबगिंग लेकिन यदि आप विजुअल स्टूडियो को किसी प्रबंधित एप्लिकेशन से अटैचमेंट करते हैं और स्पष्ट रूप से कोड प्रकार को देशी पर ओवरराइड करते हैं, तो IsDebuggerPresent() सत्य वापस आ जाएगा जबकि Debugger.IsAttached अभी भी झूठा रिटर्न देता है।

अंत में, यह सब कुछ जो आप प्राप्त करने की कोशिश कर रहे हैं उसके नीचे आता है।

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