2008-08-12 14 views
22

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

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

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

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

उत्तर

19

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

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

मैं इस विषय के बारे में एक ब्लॉग पोस्ट में लिखा है: How to debug Compiler Generated code

+2

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

0

आईएसटी परावर्तक के लिए एक डीबगर प्लग-इन है।

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

weblogs.asp.net/nunitaddin

0

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

1

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

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

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

1

यहां बीएटी फ़ाइल है जिसका उपयोग मैं विजुअल स्टूडियो में आईएल असेंबलर को डीबग करने के लिए करता हूं। बनाई गई .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

क्या आप इसे अपने विजुअल स्टूडियो पर्यावरण में पोस्ट बिल्ड चरण में चलाते हैं? –

+1

वर्तमान में मैं कमांड लाइन से आह्वान करता हूं। हालांकि, मुझे कोई तकनीकी कारण नहीं दिख रहा है कि यह क्यों काम नहीं करेगा। आईआईआरसी, मैंने पहले से ही एक पोस्ट बिल्ड चरण में परीक्षण किया है और यह उम्मीद के अनुसार काम करता है। – BSalita

+1

आप '% NAME_ONLY% 'को'% ~ dpn1' से बदल सकते हैं और पहली पंक्ति से छुटकारा पा सकते हैं – Adassko

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