ডিবাগ করার সময় আমি কীভাবে একটি প্রোগ্রাম শুরু করব?


108

আমি ভিজ্যুয়াল স্টুডিও ২০০৮-এ একটি প্রোগ্রাম ডিবাগ করতে চাই The সমস্যাটি হচ্ছে এটি যুক্তি না পেলে এটি প্রস্থান করে। এটি মূল পদ্ধতি থেকে:

if (args == null || args.Length != 2 || args[0].ToUpper().Trim() != "RM") 
{
    Console.WriteLine("RM must be executed by the RSM.");
    Console.WriteLine("Press any key to exit program...");
    Console.Read();
    Environment.Exit(-1);
}

আমি এটি মন্তব্য করতে চাই না এবং এবং সংকলন করার পরে আবার ফিরে আসতে চাই। ডিবাগ করার সময় আমি কীভাবে যুক্তি দিয়ে প্রোগ্রামটি শুরু করতে পারি? এটি স্টার্টআপ প্রকল্প হিসাবে সেট করা আছে।



উত্তর:


169

যাও Project-><Projectname> Properties। তারপরে Debugট্যাবে ক্লিক করুন এবং ডাকা পাঠ্যবক্সে আপনার যুক্তি পূরণ করুন Command line arguments


1
আর্গুমেন্টগুলি (অবশ্যই?) Command line argumentsআলাদা করা জায়গাগুলিতে পূরণ করা যেতে পারে (যেমন আপনি কমান্ড লাইনটি ব্যবহার করে করবেন)। অন্য উপায় আছে কিনা তা সম্পর্কে আমি নিশ্চিত নই, তবে সম্ভবত আপনি এটি আপনার উত্তরে যুক্ত করতে পারেন।
d4Rk

2
আমি এক সপ্তাহ ধরে এই উত্তরটি খুঁজছি! ধন্যবাদ!
পাখি 2920

ফাঁকা স্থান কমান্ড আর্গুমেন্ট কাছাকাছি বক্তৃতা চিহ্ন ভুলবেন না যে আমাকে খুঁজে পেয়েছে।
ডেল

কমান্ড লাইন পার্সারের মতো লাইব্রেরিগুলি ব্যবহার করার জন্য নামকরণযুক্ত পরামিতিগুলি ব্যবহার করা কি সম্ভব? যেমন আমি কীভাবে কিছু পাস করতে পারি -url https://google.com -p pass -u user?
অনিমেষ

54

আমি নীচের মতো নির্দেশাবলী ব্যবহার করার পরামর্শ দিচ্ছি :

        static void Main(string[] args)
        {
#if DEBUG
            args = new[] { "A" };
#endif

            Console.WriteLine(args[0]);
        }

শুভকামনা!


2
উভয়ই ভাল উত্তর, আমি এগুলি কেবলমাত্র এটি পছন্দ করি কারণ এটি পরিবর্তন করা বা রেফারেন্স করা সহজ (যদিও এটি সম্পত্তিগুলির মধ্যে দিয়ে যাওয়া কোনও ঝামেলা নয়: পি, সম্ভবত একটি অতিরিক্ত মাউস ক্লিক করুন বা তাই)
অ্যান্ড্রু জ্যাকম্যান

আমি এটি খতিয়ে দেখব। ধন্যবাদ।
ক্যাস্পার হ্যানসেন

1
আমি হোমমের সমাধানের সাথে একমত যদিও একটি ছোট প্রোগ্রামের জন্য, প্রকল্পের বৈশিষ্ট্যগুলি নির্ধারণ -> ডিবাগ ট্যাবের কমান্ড লাইন আর্গুমেন্টগুলি ডিবাগ করার জন্য আরও সরাসরি এবং সহজ উপায়, কারণ নির্দেশিকা ব্যবহার করে বড় অ্যাপ্লিকেশনগুলি আরও সহায়ক এবং মার্জিত।
সাবিতথা

উভয় সমাধানই নিখুঁত। তবে, আমি হোম্যামের দ্বারা সমাধানটিকে পছন্দ করি। এর মার্জিতটিকে প্রজেক্টের সেটিংগুলির সাথে টিঙ্কার করার প্রয়োজন নেই যা যত্ন নিতে ভুলে যেতে পারে। সেকোনফের ভেবে কেউ কোডের করা পরিবর্তনগুলিও ভুলে যেতে পারে তবে সেগুলি কমপক্ষে "দৃশ্যমান"।
অজানা

4
ওহো এই উত্তরটি উত্তর। আপনি যখনই কমান্ড লাইন প্যারামিটারের একটি নতুন সেট দিয়ে ডিবাগ করতে চান প্রকল্পের সেটিংস সম্পাদনা করা এক ক্লান্তিকর কাজ। এটি যখন এটির মতো লেখা হয়, আপনি যা পরীক্ষা করতে চান তা কেবল পরীক্ষা করে লিখতে পারেন এবং এটিকে সক্রিয় করতে প্রতিটি মন্তব্যগুলিতে টগল করতে পারেন। খুব দ্রুত এবং বিশেষত কার্যকর প্রমাণিত হয় যদি আপনি হঠাৎ করে কোনও ভিন্ন ভাষায় ভিজ্যুয়াল স্টুডিওর (আপনার সাথে কাজ করার জন্য ব্যবহৃত হয় না) এর সামনে উপস্থিত হন তবে এটি আমার ক্ষেত্রে এবং যদিও আমি ভাষাটি জানি তবে অনুবাদটি অত্যন্ত ভয়ঙ্কর এবং এমনকি কোনও স্থানীয় বক্তাও এটিকে সঠিকভাবে মোকাবেলা করতে পারবেন না। : ডি
আরবেলেকসন্দর

6

আমার পরামর্শ হ'ল ইউনিট টেস্ট ব্যবহার করা।

আপনার আবেদনে নিম্নলিখিত স্যুইচগুলি করুন Program.cs:

#if DEBUG
    public class Program
#else
    class Program
#endif

এবং একই জন্য static Main(string[] args)

অথবা বিকল্পভাবে ব্যবহার বন্ধু অ্যাসেম্বলিজ যোগ করে

[assembly: InternalsVisibleTo("TestAssembly")]

আপনার AssemblyInfo.cs

তারপরে একটি ইউনিট পরীক্ষা প্রকল্প এবং এটির মতো দেখতে কিছুটা পরীক্ষা তৈরি করুন:

[TestClass]
public class TestApplication
{
    [TestMethod]
    public void TestMyArgument()
    {
        using (var sw = new StringWriter())
        {
            Console.SetOut(sw); // this makes any Console.Writes etc go to sw

            Program.Main(new[] { "argument" });

            var result = sw.ToString();

            Assert.AreEqual("expected", result);
        }
    }
}

আপনি স্বয়ংক্রিয়ভাবে এই পদ্ধতিতে নিজের কোড সম্পাদনা না করে বা আপনি যখন অন্যরকম কিছু পরীক্ষা করতে চান প্রতিবার একটি মেনু সেটিংস পরিবর্তন না করেই একাধিক যুক্তি যুক্তি পরীক্ষা করতে পারেন।


3

আমি এই পৃষ্ঠায় এসেছি কারণ আমার কমান্ড লাইনের প্যারামিটারগুলিতে আমার সংবেদনশীল তথ্য রয়েছে এবং সেগুলি কোড ভাণ্ডারে সংরক্ষণ করা চাইত না। আমি মানগুলি ধরে রাখতে সিস্টেম এনভায়রনমেন্ট ভেরিয়েবলগুলি ব্যবহার করছিলাম, যা প্রতিটি বিল্ড বা প্রতিটি উদ্দেশ্যে প্রয়োজন হিসাবে বিকাশ মেশিনে সেট করা যেতে পারে। পরিবেশ পরিবর্তনশীল প্রসারণ শেল ব্যাচ প্রক্রিয়াগুলিতে দুর্দান্ত কাজ করে তবে ভিজ্যুয়াল স্টুডিওতে নয়।

ভিজ্যুয়াল স্টুডিও স্টার্ট বিকল্পগুলি:

ভিজ্যুয়াল স্টুডিও স্টার্ট বিকল্পগুলি

তবে ভিজ্যুয়াল স্টুডিও ভেরিয়েবলের মানটি ফেরত দেবে না, তবে ভেরিয়েবলের নাম।

ইস্যুর উদাহরণ:

ভিজ্যুয়াল স্টুডিওতে ত্রুটির উদাহরণ

এখানে বেশ কয়েকটি চেষ্টা করার পরে আমার চূড়ান্ত সমাধানটি ছিল আমার আর্গুমেন্ট প্রসেসরে পরিবেশগত পরিবর্তনশীলটির জন্য একটি দ্রুত অনুসন্ধান। আমি ইনকামিং ভেরিয়েবল ভ্যালুতে% এর জন্য একটি চেক যুক্ত করেছি, এবং যদি এটি পাওয়া যায় তবে পরিবেশ পরিবর্তনশীলটি অনুসন্ধান করে মানটি প্রতিস্থাপন করব। এটি ভিজ্যুয়াল স্টুডিওতে এবং আমার বিল্ড এনভায়রনমেন্টে কাজ করে।

foreach (string thisParameter in args)
            {
                if (thisParameter.Contains("="))
                {
                    string parameter = thisParameter.Substring(0, thisParameter.IndexOf("="));
                    string value = thisParameter.Substring(thisParameter.IndexOf("=") + 1);

                    if (value.Contains("%"))
                    {   //Workaround for VS not expanding variables in debug
                        value = Environment.GetEnvironmentVariable(value.Replace("%", ""));
                    }

এটি আমার নমুনা ব্যাচ ফাইলগুলিতে এবং ভিজ্যুয়াল স্টুডিওতে ডিবাগ করার ক্ষেত্রে একই সিনট্যাক্সটি ব্যবহার করতে আমাকে অনুমতি দেয়। জিআইটিতে কোনও অ্যাকাউন্টের তথ্য বা ইউআরএল সংরক্ষণ করা হয়নি।

ব্যাচে ব্যবহারের উদাহরণ

ব্যাচের ফাইলের উদাহরণ


1

জন্য ভিসুয়াল স্টুডিও কোড :

  • launch.jsonফাইল খুলুন
  • আপনার কনফিগারেশনে আরোগুলি যুক্ত করুন:

"আরগস": ["কিছু যুক্তি", "অন্য একটি"],

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.