c# - visual - माइक्रोसॉफ्ट विज़ुअल सी++




डीबगिंग सी#में एफ#आरईपीएल का उपयोग करने के लिए विजुअल स्टूडियो 2012 में कोई रास्ता नहीं है (2)

आप एफ # आरईपीएल के साथ एक सी # प्रोजेक्ट को डिबग करने में सक्षम होना चाहिए - मैं ऐसा करता हूं जब F # पुस्तकालय परियोजनाओं को डीबग करना होता है, लेकिन सी # एप्लिकेशन / पुस्तकालय भी काम करेंगे (मुझे लगता है)।

अपना सी # प्रोजेक्ट संकलित करें एफ # इंटरेक्टिव में, # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # अपने सी # कोड में कहीं एक ब्रेकपॉइंट सम्मिलित करें

विजुअल स्टूडियो में, Tools -> Attach to Process प्रक्रियाओं की सूची में Fsi.exe खोजें और उसे डबल-क्लिक करें; अगर आप इसे वहां नहीं देखते हैं, तो सुनिश्चित करें कि एफएसआई प्रक्रिया शुरू की गई है (बस एफ # इंटरेक्टिव विंडो के अंदर क्लिक करने से ऐसा करना चाहिए)

एफ # इंटरेक्टिव में, कुछ बिट कोड निष्पादित करें जो आपके द्वारा निर्धारित ब्रेकपेज तक पहुंचेगा; डिबगर को ब्रेकपॉईड पर निष्पादन को रोकना चाहिए जैसे आप चाहते हैं जब तक कुछ ब्रेकपॉइंट पर डीबगर बंद नहीं किया जाता है, तब तक आप FSI के अंदर से अन्य कोड निष्पादित कर सकते हैं, उदाहरण के लिए चल रहे C # अनुप्रयोग में सेटिंग्स बदलने के लिए।

महत्वपूर्ण: यह याद रखें कि जब भी कोई प्रक्रिया में लोड हो जाता है तो Windows एक विधानसभा को लॉक करता है इसका मतलब यह है कि आप अपने सी # ऐप को पुनः कंपाइल करने में सक्षम नहीं होंगे जब तक कि एफएसआई खुले नहीं है! ठीक है हालांकि - जब आप अपने सी # ऐप में कुछ बदलाव किए हैं और पुनः कंपाइल करना चाहते हैं और फिर से परीक्षण करना चाहते हैं, तो F # इंटरेक्टिव विंडो में राइट-क्लिक करें और संदर्भ-मेनू में 'इंटरैक्टिव सत्र रीसेट करें' पर क्लिक करें। प्रक्रिया को मार दिया जाएगा और पुनरारंभ किया जाएगा, ताकि आप सभी को फिर से शुरू कर सकें। (यदि आप एफएसआई प्रक्रिया को पुनः आरंभ करने के लिए भूल जाते हैं और अपने अनुप्रयोग को पुनः कंपाइल करने का प्रयास करते हैं, तो संकलन सामान्य से थोड़ा सा समय लगेगा, फिर आपको एक त्रुटि संदेश मिलेगा जिससे आपको कम्पाइलर आउटपुट फाइल में लिख नहीं सकता।)

अगर मेरे एसी # प्रोग्राम में एक ब्रेकपॉइंट है, तो मुझे अपने कोड का निरीक्षण करने के लिए F # REPL का उपयोग करना अच्छा लगेगा I क्या यह किसी भी तरह से संभव है?


आपको #I निर्देश के उपयोग से अपनी परियोजना का मार्ग शामिल करने की आवश्यकता है, तो आप अपनी विधानसभा को लोड कर सकते हैं और उसका उपयोग कर सकते हैं। फिर असेंबली लोड करें (# रा डायरेक्टिव), नाम स्थान खोलें और फिर विधियों को कॉल कर सकते हैं (और परिणाम का निरीक्षण कर सकते हैं)।

उदाहरण के लिए :

using System;

namespace ConsoleApplication1
{
    public class Program
    {
        static void Main(string[] args)
        {
            PrintMessage();
        }

        public static void PrintMessage()
        {
            Console.WriteLine("Hello World!");
        }
    }
}

और एफ # इंटरेक्टिव में:

> #I "full path to debug directory";;

--> Added 'full path to debug directory' to library include path

> #r "ConsoleApplication1.exe";;

--> Referenced 'full path to debug directory\ConsoleApplication1.exe'

> open ConsoleApplication1;;
> Program.PrintMessage();;
Hello World!
val it : unit = ()

ps: अपने प्रोजेक्ट को पहले संकलित करने की आवश्यकता है।







read-eval-print-loop