c# - সি#যদি/তারপর ডিবাগ বনাম রিলিজের জন্য নির্দেশাবলী




debugging release (8)

আপনার কোডে #define DEBUG । পূর্বনির্ধারিত বিল্ডের জন্য কনফিগারেশন নির্মাণে প্রিপ্রোকেসারগুলি সেট করুন (DEBUG / _DEBUG ইতিমধ্যে VS এ সংজ্ঞায়িত করা উচিত)।

এটি "মোড = ডিবাগ" প্রিন্ট করার কারণ আপনার #define elif এবং তারপরে elif এড়িয়ে চলে।

এছাড়াও, চেক করার সঠিক উপায় হল:

#if DEBUG
    Console.WriteLine("Mode=Debug"); 
#else
    Console.WriteLine("Mode=Release"); 
#endif

রিলেস জন্য চেক করবেন না

https://code.i-harness.com

সমাধান বৈশিষ্ট্যগুলিতে, আমার এক এবং একমাত্র প্রকল্পের জন্য আমার "রিলিজ" কনফিগারেশন সেট আছে।

প্রধান রুটিনের শুরুতে, আমার এই কোড আছে এবং এটি "মোড = ডিবাগ" দেখাচ্ছে। আমি খুব উপরের এই দুটি লাইন আছে:

#define DEBUG 
#define RELEASE

আমি সঠিক পরিবর্তনশীল পরীক্ষা করছি?

#if (DEBUG)
            Console.WriteLine("Mode=Debug"); 
#elif (RELEASE)
            Console.WriteLine("Mode=Release"); 
#endif

আমার লক্ষ্য ডিবাগ বনাম রিলিজ মোড উপর ভিত্তি করে ভেরিয়েবল জন্য বিভিন্ন ডিফল্ট সেট করা হয়।


আমি #if স্টাফের বিশাল ফ্যান নই, বিশেষ করে যদি আপনি এটি আপনার কোড বেসের চারপাশে ছড়িয়ে দেন তবে এটি আপনাকে সমস্যাগুলি দেবে যেখানে ডিবাগ পাস করে তবে যদি সতর্কতা না থাকে তবে রিলিজ বিল্ড ব্যর্থ হয়।

তাই এখানে আমি কি দিয়ে এসেছি ( # এফডিএফ # সি তে অনুপ্রাণিত):

public interface IDebuggingService
{
    bool RunningInDebugMode();
}

public class DebuggingService : IDebuggingService
{
    private bool debugging;

    public bool RunningInDebugMode()
    {
        //#if DEBUG
        //return true;
        //#else
        //return false;
        //#endif
        WellAreWe();
        return debugging;
    }

    [Conditional("DEBUG")]
    private void WellAreWe()
    {
        debugging = true;
    }
}

একটি টিপ যা আপনাকে অনেক সময় বাঁচাতে পারে - যদি আপনি বিল্ড কনফিগারেশন (এটি বানান => কনফিগারেশন ম্যানেজারের অধীনে বনাম => কনফিগারেশন ম্যানেজারের অধীনে) এর অধীনে debug নির্বাচন করেন তবে তা যথেষ্ট নয়।

আপনি পাবলিক Configuration মনোযোগ দিতে হবে, যেমন:


টড থমসন এর উত্তরটি সামান্য পরিবর্তিত (ব্যাস্টার্ডাইজড?) সংস্করণটি পৃথক শ্রেণির পরিবর্তে স্ট্যাটিক ফাংশন হিসাবে (আমি যে ভিউউট ক্লাসের সাথে ইতিমধ্যেই অন্তর্ভুক্ত ছিল তা থেকে ওয়েবফর্ম ভিউবাইন্ডিংয়ে কল করতে সক্ষম ছিলাম) এর উত্তরটি সংশোধন করেছি।

public static bool isDebugging() {
    bool debugging = false;

    WellAreWe(ref debugging);

    return debugging;
}

[Conditional("DEBUG")]
private static void WellAreWe(ref bool debugging)
{
    debugging = true;
}

নামস্থান

using System.Resources;
using System.Diagnostics;

পদ্ধতি

   private static bool IsDebug()
    {
        object[] customAttributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(DebuggableAttribute), false);
        if ((customAttributes != null) && (customAttributes.Length == 1))
        {
            DebuggableAttribute attribute = customAttributes[0] as DebuggableAttribute;
            return (attribute.IsJITOptimizerDisabled && attribute.IsJITTrackingEnabled);
        }
        return false;
    }

প্রোজেক্ট বিল্ড প্রোপার্টিগুলিতে DEBUG ধ্রুবক সংজ্ঞায়িত করতে ভুলবেন না। এটি #if DEBUG সক্ষম করবে। আমি একটি পূর্ব-সংজ্ঞায়িত RELEASE ধ্রুবক দেখতে পাচ্ছি না, যাতে কোনও ডেবিউগ ব্লকটিতে কোনওটি রিলিজ মোড প্রকাশ করতে পারে না।


যেহেতু এই কম্পাইলার নির্দেশগুলি কম্পাইলারকে কোড, ডিবাগ কোড, বিটা কোড, অথবা সম্ভবত আপনার সমস্ত শেষ ব্যবহারকারীদের দ্বারা প্রয়োজনীয় কোডটি না অন্তর্ভুক্ত করতে বলার জন্য, বিজ্ঞাপন বিভাগের অর্থ # ডিফাইন AdDept আপনি চান আপনার চাহিদা উপর ভিত্তি করে তাদের অন্তর্ভুক্ত বা অপসারণ করতে সক্ষম হবেন। আপনার সোর্স কোড পরিবর্তন না করেই উদাহরণস্বরূপ একটি অ-অ্যাডডপড AdDept এ মার্জ হয়ে যায়। তারপরে যা করতে হবে তা হল প্রোগ্রামটির একটি বিদ্যমান সংস্করণের কম্পাইলার বিকল্পগুলির বৈশিষ্ট্য পৃষ্ঠাতে #AdDept নির্দেশিকা অন্তর্ভুক্ত করা এবং একটি কম্পাইল এবং ওয়া লা করা! মার্জ প্রোগ্রামের কোড স্প্রিংস জীবিত!

আপনি এমন একটি নতুন প্রক্রিয়াটির জন্য একটি ঘোষনামূলক ব্যবহার করতে চাইতে পারেন যা প্রাইম টাইমের জন্য প্রস্তুত না হয় বা এটি প্রকাশ করার সময় পর্যন্ত কোডে সক্রিয় হতে পারে না।

যাইহোক, যে ভাবে আমি এটা করতে।


শীর্ষে আপনার সংজ্ঞায়িত সরান

#if DEBUG
        Console.WriteLine("Mode=Debug"); 
#else
        Console.WriteLine("Mode=Release"); 
#endif






release