आईएल स्तर कोड डीबगर

क्या वीएस प्लगइन या स्टैंडअलोन एप्लिकेशन के रूप में कोई आईएल स्तर डीबगर है?

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

विशेष रूप से यह सहायक हो सकता है जब उस कोड में किसी समस्या को डीबग करते हुए आपके पास स्रोत नहीं है।

यह तर्कसंगत है अगर आईएल को डीबग करने में वास्तव में उपयोगी होता है जब आपके पास स्रोत नहीं होता है, लेकिन वैसे भी।

0
ro fr bn

5 उत्तर

आईएल डिबगिंग के बारे में यहां एक आलेख है। यह कहता है कि आप इसे नहीं कर सकते हैं और फिर इसे करने के तरीकों के बारे में बात करते हैं। इसे करने के बारे में टिप्पणियों में कुछ जानकारी भी है।

0
जोड़ा

ऐसा करने का सबसे अच्छा तरीका आईएलडीएएसएम का उपयोग प्रबंधित बाइनरी को अलग करने के लिए करना है, जो आईएल निर्देश उत्पन्न करेगा। फिर ILASM का उपयोग करते हुए डीबग मोड में आईएल स्रोत कोड को पुन: संकलित करें, जब आप विजुअल स्टूडियो डीबगर को फायर करते हैं तो आप कच्चे आईएल के माध्यम से कदम उठाने में सक्षम होंगे।

  1. ildasm foo.exe /OUT=foo.exe.il/SOURCE
  2. ilasm foo.exe.il/DEBUG

मैंने इस विषय के बारे में एक ब्लॉग पोस्ट लिखा है: कंपाइलर को डिबग कैसे करें जनरेटेड कोड

0
जोड़ा
यह एक अच्छा दृष्टिकोण है, लेकिन आप इसे एक हस्ताक्षरित असेंबली के लिए उपयोग नहीं कर सकते हैं।
जोड़ा लेखक axk, स्रोत

डीबग कंपैनियन वीएस प्लगइन बिल्कुल वैसा ही प्रतीत होता है जो मैं खोज रहा था, सिवाय इसके कि यह मेरे समाधान में लाइब्रेरी प्रोजेक्ट नहीं देखेगा। केवल जब मैंने समाधान में कंसोल जीत आवेदन जोड़ा, तो परियोजनाओं की उस सूची में कुछ दिखाई दिया।

मेरे लिए डिकंपाइल/संकलन दृष्टिकोण के साथ समस्या यह थी कि जिस कोड को मैं डिबगिंग कर रहा था वह मेरा कोड नहीं था। मैं इसे किसी भी तरह से अपमानित कर सकता था लेकिन मुझे लगता है कि उस पुन: संकलित असेंबली पर हस्ताक्षर करने का कोई तरीका नहीं है ताकि यह मूल के बजाय लोड हो जाए।

विशेष समस्या के साथ मैंने यह पता चला कि यह असेंबली भाषा स्तर पर इसे डीबग करने के लिए पर्याप्त था और उस विधि का कॉल स्टैक प्राप्त करें जो अपवाद फेंक रहा था और पैरामीटर जिसके साथ विधि कहा गया था।

0
जोड़ा

ISTR वहाँ परावर्तक के लिए एक डीबगर प्लग-इन है।

इसे स्वयं नहीं इस्तेमाल किया, हालांकि मैंने प्रतिबिंबक की सहायता से तृतीय पक्ष असेंबली डीबग करने के लिए TestDriven.net का उपयोग किया है:

weblogs.asp.net/nunitaddin

0
जोड़ा

यहां बीएटी फ़ाइल है जिसका उपयोग मैं विजुअल स्टूडियो में आईएल असेंबलर को डीबग करने के लिए करता हूं। बनाई गई .IL.IL फ़ाइल में मूल स्रोत कोड लाइनें और आपकी जेनरेट की गई आईएल असेंबलर लाइनें हैं लेकिन यह ज्यूट मशीन कोड नहीं दिखाती है। मैंने बैच फ़ाइल ILDEB.BAT नाम दिया और इसे "ILDEB mypgm" के रूप में बुलाया गया है। मैं हिट करते समय ब्रेकपॉइंट पर विजुअल स्टूडियो डीबगर को मजबूर करने के लिए आईएल असेंबलर निर्देश "ब्रेक" का उपयोग करता हूं।

for /f "tokens=1 delims=." %%1 in ("%1") do set NAME_ONLY=%%1
@erase/q %NAME_ONLY%.il.il
@if not exist %NAME_ONLY%.dll goto quit
ildasm /out:%NAME_ONLY%.il.il /source /nobar %NAME_ONLY%.dll
@if not exist %NAME_ONLY%.il.il goto quit
ilasm /dll /debug /out=%NAME_ONLY%.dll %NAME_ONLY%.il.il
@if not exist %NAME_ONLY%.dll goto quit
peverify %NAME_ONLY%.dll
:quit
0
जोड़ा
वर्तमान में मैं कमांड लाइन से आह्वान करता हूं। हालांकि, मुझे कोई तकनीकी कारण नहीं दिख रहा है कि यह क्यों काम नहीं करेगा। आईआईआरसी, मैंने पहले से ही एक पोस्ट बिल्ड चरण में परीक्षण किया है और यह उम्मीद के अनुसार काम करता है।
जोड़ा लेखक BSalita, स्रोत
आप % NAME_ONLY% को % ~ dpn1 से प्रतिस्थापित कर सकते हैं और पहली पंक्ति से छुटकारा पा सकते हैं
जोड़ा लेखक Adassko, स्रोत
क्या आप इसे अपने विजुअल स्टूडियो पर्यावरण में एक पोस्ट बिल्ड चरण में चलाते हैं?
जोड़ा लेखक Shahzad Qureshi, स्रोत