2012-11-21 8 views
8

मैं मोनो के लिए विजुअल स्टूडियो समाधान संकलित करने के लिए एक्सबिल्ड का उपयोग कर रहा हूं। यह असेंबली + एमडीबी फ़ाइल उत्पन्न करता है। विंडोज़ पर विजुअल स्टूडियो के साथ इस असेंबली को डीबग करने की संभावना है? "प्रक्रिया में संलग्न करें" का उपयोग करते समय मैं डीबग नहीं कर सकता क्योंकि एक त्रुटि दिखायी जाती है कि प्रतीकों को लोड नहीं किया जाता है।क्या विंडोज़ पर विजुअल स्टूडियो के साथ मोनो/एक्सबिल्ड के साथ संकलित असेंबली डीबग करना संभव है?

मैं Mono.Cecil (AssemblyDefinition, MdbReaderProvider, PdbWriterProvider) के माध्यम से इस विधानसभा के लिए pdb फ़ाइल पैदा करने और डीबग/विंडोज/मॉड्यूल और "लोड प्रतीक से/प्रतीक पथ", जो वास्तव में प्रतीकों को लोड करता है के माध्यम से मैन्युअल रूप से इसे लोड करने की कोशिश की (मॉड्यूल विंडोज़ में दिखाया गया है) लेकिन यह डीबगिंग को सक्षम नहीं करता है।

+1

मुझे विश्वास नहीं है कि यह संभव है (लेकिन मुझे गलत साबित होना अच्छा लगेगा)। –

+1

जब मैंने कई साल पहले मोनो के 'एमडीबी' फ़ाइल प्रारूप का निर्माण किया था, पीडीबी अनियंत्रित और स्वामित्व था, इसलिए हम बस इसका उपयोग नहीं कर सके। और AFAIK, यह आज भी सच है (कम से कम विकिपीडिया ऐसा कहता है)। इन फ़ाइलों को लिखने के लिए वहां कुछ टूल हो सकते हैं, लेकिन वे पूरी तरह से "सही" पीडीबी उत्पन्न नहीं कर सकते हैं जब तक कि वे या तो माइक्रोसॉफ्ट द्वारा लिखे गए हों या वे फ़ाइल प्रारूप प्रकाशित न करें। हालांकि, मैं इसके बारे में गलत साबित होना भी पसंद करूंगा। –

+0

एफवाईआई यदि आप विपरीत कर रहे हैं, तो पीडीबी को मोनो प्रारूप – KCD

उत्तर

6

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

  1. उपयोग XBuild प्रत्येक विधानसभा आप pdb फ़ाइल उत्पन्न करने के लिए डिबग करने के लिए और इंजेक्षन करना चाहते हैं के लिए समाधान
  2. उपयोग Mono.Cecil संकलित करने के लिए: निम्न चरणों VS2012 के साथ मोनो/XBuild साथ संकलित डिबग विधानसभाओं के लिए आवश्यक हैं DebuggableAttribute generatin के लिए चल रहे प्रोग्राम

कोड डिबग करने के लिए VS2012 से (नीचे कोड देखें)

  • अपने साथ XBuild संकलित कार्यक्रम
  • उपयोग शुरू करें "डीबग/कार्रवाई करने के लिए संलग्न ..." जी पीडीबी और इंजेक्शनिंग डिबग्रेबलएट्रिब्यूट:

    string assemblyPath = @"HelloWorld.exe"; 
    
    var assemblyDefinition = AssemblyDefinition.ReadAssembly(assemblyPath, 
        new ReaderParameters() { SymbolReaderProvider = new MdbReaderProvider(), ReadSymbols = true}); 
    
    CustomAttribute debuggableAttribute = newCustomAttribute(
    assemblyDefinition.MainModule.Import(
        typeof(DebuggableAttribute).GetConstructor(new[] { typeof(bool), typeof(bool) }))); 
    
    debuggableAttribute.ConstructorArguments.Add(new CustomAttributeArgument(
        assemblyDefinition.MainModule.Import(typeof(bool)), true)); 
    
    debuggableAttribute.ConstructorArguments.Add(new CustomAttributeArgument(
        assemblyDefinition.MainModule.Import(typeof(bool)), true)); 
    
    assemblyDefinition.CustomAttributes.Add(debuggableAttribute); 
    
    assemblyDefinition.Write(assemblyPath, 
        new WriterParameters() { SymbolWriterProvider = new PdbWriterProvider(), WriteSymbols = true}); 
    
  • 4

    यह एक बार एक बार प्रयास के साथ संभव है।

    आपको मोनो mdb फ़ाइलों को pdb फ़ाइलों में कनवर्ट करने की आवश्यकता है। उसके बाद वीएस आपके साथ कोड के माध्यम से कदम उठाने में सक्षम होना चाहिए (यदि आपके पास स्रोत भी हैं) - नीचे देखें।

    http://johnhmarks.wordpress.com/2011/01/19/getting-mono-cecil-to-rewrite-pdb-files-to-enable-debugging/

    Mono.Cecil काफी अक्सर बदलने करता है ताकि आप एपीआई मिल सकता है इस के लिए एक छोटे से बदल गया है।

    +0

    में कनवर्ट करने के लिए 'pdb2mdb some.dll' का उपयोग करें। मुझे यह पोस्ट पूछने और कोशिश करने से पहले भी मिला (प्रश्न का दूसरा भाग - असेंबलीडिफिनिशन, एमडीबी रीडरप्रोवाइडर, पीडीबीवाइटरप्रोवाइडर के माध्यम से), हो सकता है कि मैंने कुछ गलत किया - लेकिन वीएस ने प्रतीकों को स्वचालित रूप से लोड नहीं किया और जब मैं उन्हें डीबग/विंडोज/मॉड्यूल और "लोड प्रतीक से/प्रतीक पथ" के माध्यम से मैन्युअल रूप से लोड करता हूं तो कुछ भी नहीं बदला। जब मैं @ घर हूं तो मैं अपना कोड स्निपेट पोस्ट करूंगा। – Dresel

    +0

    आपको एक डिबग्रेबल एट्रिब्यूट भी जोड़ना है, नीचे मेरा जवाब देखें। – Dresel

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