ডিবাগার থেকে কীভাবে বস্তুটিকে সিরিয়ালাইজ করা যায় ভিজ্যুয়াল স্টুডিও


90

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


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

অনেক ভাল কৌশল এছাড়াও পাওয়া যেতে পারে [এখানে] ( stackoverflow.com/questions/360277/... )
জোশ

উত্তর:


89

কিছু সময় আগে আমি এই ওয়ান-লাইনারটি ডিস্কের কোনও ফাইলের কোনও বস্তুকে সিরিয়ালাইজ করে লিখেছিলাম। এটি আপনার তাত্ক্ষণিক উইন্ডোতে অনুলিপি করুন / আটকে দিন এবং objএটি আপনার বস্তুর সাথে প্রতিস্থাপন করুন (এটি দু'বার উল্লেখ করা হয়েছে)। এটি এতে কোনও text.xmlফাইল সংরক্ষণ c:\tempকরবে এবং এটিকে আপনার পছন্দ অনুযায়ী পরিবর্তন করবে।

(new System.Xml.Serialization.XmlSerializer(obj.GetType())).Serialize(new System.IO.StreamWriter(@"c:\temp\text.xml"), obj)

যদিও কোনও যাদু আশা করবেন না, যদি বিষয়টিকে সিরিয়ালাইজ করা না যায় তবে এটি ব্যতিক্রম ছুঁড়ে ফেলবে।


4
এটি আমার জন্য তাত্ক্ষণিক উইন্ডোতে কাজ করেছিল। upvated,
পঙ্কজ কুমার

4
আমি যখন ভিএস 2015 তাত্ক্ষণিক উইন্ডোতে এটি ব্যবহার করি, তখন আমি এই 'ত্রুটি' পাই: "এই প্রসঙ্গে স্থানীয় পদ্ধতিগুলির মূল্যায়ন সমর্থিত নয়" " ধারনা?
ভেট্রাস

আমি যখন এটি চালাব, আমি নিম্নলিখিত বার্তাটি পেয়েছি:identifier "System" is undefined
রসুল

একটি পুরাতন ভিবি.এনইটি প্রকল্প ছিল, এটি এটিকে এইভাবে রাখা উচিত অন্যথায় আমি যদি কারওর প্রয়োজন হয় তবে আমি এক্সপ্রেশন সিনট্যাক্স সম্পর্কে ত্রুটি পেয়ে যাচ্ছিলাম: নতুন সিস্টেম.এক্সএমএল.সরিয়ালাইজেশন। এক্সএমএলসিরাইজার (অবজেক্ট.গেটটাইপ ()) সিরিয়ালাইজ (নতুন সিস্টেম.আইও) স্ট্রিম রাইটার ("সি: \ টেম্প \ টেম্প। টেক্সট"), আপত্তি)
তরল কোর

এটি দর্শনীয়। লেখার অনুমতিগুলির কারণে আমাকে একটি ভিন্ন ডিরেক্টরি ব্যবহার করতে হয়েছিল, তবে এটি একটি কবজির মতো কাজ করেছে। এক্সেলে আমদানি করুন এবং এটি এমনকি সুন্দর।
বুডিজেড

164

কোনও ভাগ্যের সাথে আপনার অ্যাপসোমেনে জেসন.নেট রয়েছে। এই ক্ষেত্রে এটি আপনার তাত্ক্ষণিক উইন্ডোতে পপ করুন:

Newtonsoft.Json.JsonConvert.SerializeObject(someVariable)


20
বিশেষত অন্যান্য উত্তরের তুলনায় আমি আবার এটিকে উত্সাহ দিতে পারতাম বলে আশা করি। (দুঃখিত, তবে আমার ক্যারিয়ারে এক্সএমএলের আর একটি লাইন দেখার দরকার নেই।)
yzorg

4
একটি দীর্ঘ পরীক্ষার ডিবাগ সেশনের পরে আমার প্রোগ্রামে একটি ব্যতিক্রম ঘটেছিল এটি কোনও ফাইলের কাছে কয়েক হাজার পরীক্ষার ফলাফল লেখার আগে, আমি একটি ব্রেকপয়েন্টে ছিলাম যেখানে ব্যতিক্রম ঘটেছিল এবং এখনও ফলাফল সংগ্রহটি পরীক্ষা করতে পারে। এই টিপটি আমাকে অনেক সময় বাঁচায়!
HAL9000

4
আপনার সম্ভবত জাসন. নেটকে অন্য কোথাও ব্যবহার করার প্রয়োজন হতে পারে যাতে আপনি তাৎক্ষণিক উইন্ডোতে ব্যবহার করার চেষ্টা করার সময় এটি লোড করা হয় (কেবলমাত্র রেফারেন্স যুক্ত করার বিপরীতে)।
ইভান

4
আমাকে নিউটোনসফট.জসন প্যাকেজটি নুগেট ব্যবহার করে যুক্ত করতে হয়েছিল এবং ডামি নিউটোনসফট.জসন.জসনআরআআআর্ট্রিবিউট () শ্রেণিটি কাজ করতে এটি তৈরি করতে আমার যে পদ্ধতিতে ব্রেকআপ পয়েন্ট ছিল তাতে কোডের একটি লাইন যুক্ত করতে হয়েছিল। একটি দুর্দান্ত সমাধান!
রিচার্ড মুর

4
এটি একটি দুর্দান্ত উত্তর। বিউটিফায়ারটিতে আমার ট্রিপ বাঁচাতে আমি এটি একটি ছোট্ট পরিবর্তন দিয়ে ব্যবহার করি use নিউটনসফট.জসন.জসন কনভার্ট.সরিয়ালাইজ অবজেক্ট (কিছুটা পরিবর্তনশীল, নিউটোনসফট.জসন.ফর্ম্যাটিং.ইন্সেডেড)
জেমি

37

এখানে একটি ভিজ্যুয়াল স্টুডিও এক্সটেনশন যা আপনাকে ঠিক তা করতে দেয়:

https://visualstudiogallery.msdn.microsoft.com/c6a21c68-f815-4895-999f-cd0885d8774f

আপনি জেএসএন, এক্সএমএল বা সি # তে আউটপুট দিতে পারেন


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

4
আপনাকে ধন্যবাদ @ ওমর ধারণাটি নিখুঁত। তবে এটি বেশ দীর্ঘ সময় নেয় এবং কিছু ক্ষেত্রে স্থির হয়ে যায়
ওয়াহিদ বিটার

4
@ ওয়াহিদবিটারের সাথে একমত - দুর্দান্ত ধারণা - ইউনিট পরীক্ষার ডেটা সেট আপ করার জন্য নিখুঁত, তবে এক্সটেনশনটি বেশ বগিযুক্ত মনে হয় এবং ক্র্যাশ হওয়ার সাথে সাথে এটি ভিজ্যুয়াল স্টুডিওতে নিয়ে যায়!
দিবাল

এটি সত্যিই একটি খুব দরকারী সরঞ্জাম।
আশুতোষ সিং


4

c:\directory\file.jsonআপনি JSON লিখতে চান এমন ফাইলের পুরো পথটির পরিবর্তে এবং myObjectসিরিয়ালটিতে আপনার পরিবর্তনশীল সহ: ভিজুয়াল স্টুডিওর "তাত্ক্ষণিক" উইন্ডোটিতে এটি ব্যবহার করুন :

System.IO.File.WriteAllText(@"c:\directory\file.json", Newtonsoft.Json.JsonConvert.SerializeObject(myObject))

3

আমার ব্যবহৃত একটি এক্সটেনশন পদ্ধতি রয়েছে:

public static void ToSerializedObjectForDebugging(this object o, FileInfo saveTo)
{
    Type t = o.GetType();
    XmlSerializer s = new XmlSerializer(t);
    using (FileStream fs = saveTo.Create())
    {
        s.Serialize(fs, o);
    }
}

আমি সেভটোর জন্য একটি স্ট্রিং দিয়ে এটি ওভারলোড করেছি এবং তাৎক্ষণিক উইন্ডো থেকে কল করেছি:

public static void ToSerializedObjectForDebugging(this object o, string saveTo)
{
    ToSerializedObjectForDebugging(o, new FileInfo(saveTo));
}

3

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

আরেকটি বিকল্প হ'ল ToString()পদ্ধতিটি ওভাররাইড করা এবং ডিবাগ মোডে থাকাকালীন কল করা।

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


ধন্যবাদ, আমি ওয়াচ উইন্ডো থেকে একই চেষ্টা করেছি, তবে এটি আমাকে বলেছিল "ফাংশন মূল্যায়নের জন্য সমস্ত থ্রেড চালানো দরকার।" তাত্ক্ষণিক উইন্ডো এটি সমাধান করুন
xvorsx

1

ওমর এলাবাদের উত্তরের একটি পার্থক্য -

এটি নিখরচায় নয়, তবে ওসকোডের জন্য একটি নিখরচায় পরীক্ষা আছে
( https://marketplace.visualstudio.com/items?itemName=CodeValueLtd.OzCode )।

প্রাসঙ্গিক / হোভার মেনুর মধ্যে জেএসএন-তে বিল্ট-ইন রফতানি রয়েছে এবং এটি অবজেক্ট এক্সপোর্ট এক্সটেনশন (এটি মুক্ত না হওয়ার জন্য বাণিজ্য বন্ধ) এর চেয়ে কিছুটা ভাল কাজ করে।

http://o.oz-code.com/features#export (ডেমো)

আমি জানি এটি বাস্তবতার কয়েক বছর পরে, তবে আমি এখানে একটি উত্তর রেখে চলেছি কারণ এটি আমার পক্ষে কাজ করেছে, এবং অন্য কেউ এটি দরকারী বলে মনে করতে পারেন।


1

আপনার কাছে একটি বিজ্ঞপ্তি সংক্রান্ত রেফারেন্স থাকলে তাৎক্ষণিক উইন্ডোতে এটি চালান:

Newtonsoft.Json.JsonConvert.SerializeObject(app, Newtonsoft.Json.Formatting.Indented,
new Newtonsoft.Json.JsonSerializerSettings
{
    ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Serialize
});

1

আমি অবজেক্টডাম্পার নেট ব্যবহার করেছি

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

আপনি XUnit ব্যবহার করা হলে এটি সহায়তা করতে পারে।


0

অ্যালেক্সির উত্তরের একটি পার্থক্য। সামান্য আরও জটিল তবে কোনও পাঠ্য ফাইলে লেখার সাথে জড়িত নয়:

1) তাত্ক্ষণিক উইন্ডোতে প্রবেশ করুন:

System.IO.StringWriter stringWriter = new System.IO.StringWriter();  

2) ওয়াচ উইন্ডোতে দুটি ঘড়ি প্রবেশ করুন:

a.  stringWriter

b.  new System.Xml.Serialization.XmlSerializer(obj.GetType()).Serialize(stringWriter, obj) 

আপনি দ্বিতীয় ঘড়িটি প্রবেশ করার পরে (সিরিয়ালাইজ ওয়ান) স্ট্রিং রাইটার ওয়াচ মানটি এক্সএমএলে সিরিয়ালযুক্ত আপত্তি হিসাবে সেট করা হবে। এটি কপি এবং পেস্ট করুন। নোট করুন যে এক্সএমএলটি কোঁকড়া ধনুর্বন্ধনী, {...} দিয়ে আবদ্ধ থাকবে, তাই আপনি যদি কোনও কিছুর জন্য এক্সএমএল ব্যবহার করতে চান তবে সেগুলি সরিয়ে ফেলতে হবে।

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