সি # ডিবাগিং: [ডিবাগারডিসপ্লে] বা টোস্ট্রিং ()?


92

{MyNamespace.MyProject.MyClass}ডিবাগারে না গিয়ে ডিবাগিং তথ্যের উপযোগিতা বাড়ানোর দুটি উপায় রয়েছে ।

এগুলি হ'ল ব্যবহার DebuggerDisplayAttributeএবং ToString()পদ্ধতি।

using System.Diagnostics;
...

[DebuggerDisplay("Name = {Name}")]
public class Person
{
    public string Name;
}

বা

public class Person
{
    public string Name;
    public override string ToString()
    {
        return string.Format("Name = {0}", Name);
    }
}

একে অপরের চেয়ে পছন্দ করার কোনও কারণ আছে কি? দুটোই না করার কোনও কারণ? এটি কি নিখুঁতভাবে ব্যক্তিগত পছন্দ?

উত্তর:


94

ব্যবহার [DebuggerDisplay]করা কেবলমাত্র ডিবাগারের জন্য। ওভাররাইডিং টসস্ট্রিং () রানটাইমে প্রদর্শন পরিবর্তন করার "পার্শ্ব প্রতিক্রিয়া" রয়েছে।

এটি ভাল জিনিস নাও হতে পারে।

প্রায়শই, আপনি নিজের স্ট্যান্ডার্ড ToString()আউটপুট থেকে ডিবাগিংয়ের সময় আরও তথ্য চান , এমন ক্ষেত্রে আপনি উভয়ই ব্যবহার করতে পারেন।

উদাহরণস্বরূপ, আপনার ক্ষেত্রে, "টোস্ট্রিং" বাস্তবায়ন আমার কাছে অদ্ভুত বলে মনে হচ্ছে। আমি আশা করব একটি "ব্যক্তি" শ্রেণি টোস্ট্রিং () বাস্তবায়ন কেবল "নাম = ব্যক্তির নাম" নয়, সরাসরি নাম ফিরিয়ে দেবে। তবে, ডিবাগিংয়ের সময়, আমি অতিরিক্ত তথ্যটি পেতে চাই।


9
+1 রিডের "পার্শ্ব প্রতিক্রিয়া" পয়েন্টে যুক্ত করতে: ToStringপ্রায়শই একটি "ডিফল্ট প্রদর্শন স্ট্রিং" হিসাবে ব্যবহৃত হয়, যেমন, দ্বারা Console.WriteLineবা ডাব্লুপিএফ ডেটা বাইন্ডিং inding
স্টিফেন ক্লিয়ারি

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

5

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

যদি ToString()ডিটার্গারে কী ফিরে আসে এবং আপনি যদি দেখতে পান তবে তা ব্যবহার করুন DebuggerDisplayAttribute


4

ডিবাগরের স্বচ্ছলতাও আমলে নেওয়া যেতে পারে:

DebuggerDisplayAttributeফর্ম্যাট এক্সপ্রেশনটি প্রতিটি ডিবাগিং স্টেপ / ব্রেকপয়েন্টের পরে ডিবাগার দ্বারা ব্যাখ্যা করা হয়।

ToStringহয় কম্পাইল আপনার কোডে এবং সেইজন্য অনেক দ্রুত ডিবাগার দ্বারা চালানো হয়।

এটি শর্তসাপেক্ষ ব্রেকআপপয়েন্টগুলির সাথে একই: শর্তসাপেক্ষ এক্সপ্রেশনটি যখন প্রতিটি বার এক্সিকিউশন ব্রেকআপপয়েন্টে পৌঁছে যায় তখন ডিবাগারের দ্বারা ব্যাখ্যা করতে যদি শর্তযুক্ত অভিব্যক্তি খুব ধীর হয় তবে ব্রেকপয়েন্টটি সরাতে এবং এর পরিবর্তে অস্থায়ী কোড যুক্ত করতে এটি কার্যকর হতে পারে: if (condition) Debugger.Break();

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