मैं इस कोड का टुकड़ा मिला, लेकिन यह सच वापस नहीं करता है जब मैं डिबगिंग हूँ:क्या IsDebuggerPresent() के बराबर सी # # है?
[DllImport("kernel32.dll", CharSet=CharSet.Auto, ExactSpelling=true)]
internal static extern bool IsDebuggerPresent();
मैं इस कोड का टुकड़ा मिला, लेकिन यह सच वापस नहीं करता है जब मैं डिबगिंग हूँ:क्या IsDebuggerPresent() के बराबर सी # # है?
[DllImport("kernel32.dll", CharSet=CharSet.Auto, ExactSpelling=true)]
internal static extern bool IsDebuggerPresent();
हाँ:
System.Diagnostics.Debugger.IsAttached
आप C#
के रूप में अपने प्रश्न में चिह्नित इसलिए मैं जब यह सोचते कर रहा हूँ कह रही है "लेकिन जब मैं डिबगिंग कर रहा हूं तो यह सच नहीं होता है" आप वास्तव में प्रबंधित डिबगिंग के बारे में बात करते हैं।
IsDebuggerPresent()
एक देशी डीबगर मौजूद होने के लिए फ़ंक्शन चेक। यदि आपके (प्रबंधित) डीबगर मौजूद है या नहीं, तो अपने मामले में आपको System.Diagnostics.Debugger.IsAttached
का उपयोग करना चाहिए।
डीबगर API पर अधिक जानकारी के लिए this blog post का भी संदर्भ लें।
.नेट फ्रेमवर्क कि IsDebuggerPresent()
जैसा दिखता है सबसे के सदस्य स्पष्ट रूप से Debugger.IsAttached
है, लेकिन उनके आंतरिक कार्यप्रणाली सरल OutputDebugString
से बहुत अलग ढंग सिर्फ काम करता है की तरह, पूरी तरह से अलग कर रहे हैं।
Debugger.IsAttached
एक संलग्न कामयाब डिबगर की उपस्थिति के लिए CLR पूछता है, और यहां तक कि एक देशी डिबगर की उपस्थिति की जांच करने के लिए परेशान नहीं किया।IsDebuggerPresent()
कर्नेल से संलग्न मूल डीबगर की उपस्थिति के लिए पूछता है, और प्रबंधित डिबगर्स का कोई ज्ञान नहीं है।विजुअल स्टूडियो 2013 के अनुसार, प्रबंधित डिबगर एक देशी डिबगर के शीर्ष पर बनाया गया है, इसलिए दोनों IsDebuggerPresent()
और Debugger.IsAttached
सच लौट जाना चाहिए जब बनाम तहत एक कामयाब आवेदन डिबगिंग लेकिन यदि आप विजुअल स्टूडियो को किसी प्रबंधित एप्लिकेशन से अटैचमेंट करते हैं और स्पष्ट रूप से कोड प्रकार को देशी पर ओवरराइड करते हैं, तो IsDebuggerPresent()
सत्य वापस आ जाएगा जबकि Debugger.IsAttached
अभी भी झूठा रिटर्न देता है।
अंत में, यह सब कुछ जो आप प्राप्त करने की कोशिश कर रहे हैं उसके नीचे आता है।
आप क्या करना चाहते हैं? –
'#if डीबग' ??? – SpaceBison
डीबगर में चलते समय केवल कुछ बटन दिखाएं। #if डीबग करेंगे! सी ++ में मैंने IsDebuggerPresent को प्राथमिकता दी क्योंकि यह डेवलपर इसे अलग-अलग देख रहा था या नहीं (रिलीज़ या डीबग में)। – noelicus