मैं [MethodImpl(MethodImplOptions.InternalCall)]
बीसीएल विधि के कार्यान्वयन में डीबग करना चाहता हूं, जिसे संभवतः सी ++ में कार्यान्वित किया गया है। (इस विशेष मामले में, मैं System.String.nativeCompareOrdinal देख रहा हूं।) यह मुख्य रूप से इसलिए है क्योंकि मैं नुकीला हूं और जानना चाहता हूं कि यह कैसे कार्यान्वित किया गया है।मैं एक अप्रबंधित बीसीएल (InternalCall) विधि में कैसे डिबग कर सकता हूं?
हालांकि, विजुअल स्टूडियो डीबगर उस विधि में कदम उठाने से इनकार कर रहा है। मैं इस फोन पर एक ब्रेकपाइंट सेट कर सकते हैं:
"Hello".Equals("hello", StringComparison.OrdinalIgnoreCase);
तो कदम डिबग> विंडोज> Disassembly को लाने, बराबर में कदम कहते हैं, और जब तक यह call
x86 निर्देश के लिए हो जाता है। लेकिन जब मैं उस call
पर "चरण में" का उपयोग करने का प्रयास करता हूं (जिसे मैं प्रतिबिंबक से जानता हूं वह देशी कॉम्पैयरऑर्डिनल कॉल है), यह देशी कॉम्पैयरऑर्डिनल के अंदर पहले निर्देश के लिए कदम नहीं उठाता है - यह इसके बजाय कदम उठाता है, और सीधे जाता है बराबर में अगला x86 निर्देश।
मैं x86 के रूप में निर्माण कर रहा हूं, क्योंकि मिश्रित मोड डिबगिंग x64 ऐप्स के लिए समर्थित नहीं है। मैंने टूल्स> विकल्प> डिबगिंग में "जस्ट माई कोड" अनचेक किया है, और मेरे पास प्रोजेक्ट गुणों में डिबग किए गए "अप्रबंधित कोड डिबगिंग सक्षम करें" है - डीबग टैब, लेकिन यह अभी भी call
पर कदम उठाता है। मैंने प्रक्रिया शुरू करने और फिर डीबगर को जोड़ने की कोशिश की, और स्पष्ट रूप से प्रबंधित और देशी डिबगर्स दोनों को संलग्न किया, लेकिन यह अभी भी उस आंतरिक कॉल विधि में कदम नहीं उठाएगा।
मैं एक अप्रबंधित विधि में कदम उठाने के लिए विजुअल स्टूडियो डीबगर कैसे प्राप्त कर सकता हूं?
मैं किसी विधि पर घायल नहीं हुआ, लेकिन एक थक्का - एक पीओपी ईएक्स के लिए एक जेएमपी को कॉल किया गया था (कॉल के वापसी मूल्य को स्टैक से वापस पॉप करने के लिए)। मुझे लगता है कि एक थंक के लिए व्यवहार्य शुरुआत। हां, जब मैंने कॉल ऑपोड पर ब्रेकपॉइंट सेट किया था, तो डीबगर हमेशा के लिए बैठा था, सीपीयू को हॉगिंग करता था लेकिन कभी नहीं तोड़ता था; और जब मैंने उस ब्रेकपॉइंट को हटा दिया और इसके बजाय जेएमपी और पीओपी पर ब्रेकपॉइंट्स सेट किए, तो यह उनके पीछे ठीक से चला गया, जिससे ऐप को कभी भी तोड़ने के बिना पूरा करने की अनुमति मिल गई। इसलिए मैं इस तरह x86 ऑपकोड देख सकता हूं, लेकिन स्पष्ट रूप से डीबग नहीं कर सकता उनके द्वारा। कुछ भी नहीं से काफी बेहतर है, लेकिन अभी भी थोड़ा निराशाजनक है। –
कोई थंक नहीं है, मुझे नहीं लगता कि आपको सही कोड मिला है। –