Visual Studio डीबग मोड में ऑब्जेक्ट मान की प्रतिलिपि बनाएँ


138

विजुअल स्टूडियो डिबग मोड में अपने मूल्य को दिखाने के लिए चर पर मंडराना संभव है और फिर "कॉपी", "कॉपी एक्सप्रेशन" या "कॉपी वैल्यू" पर राइट-क्लिक करें।

यदि चर एक वस्तु है और केवल एक मूल प्रकार नहीं है, तो वस्तु का विस्तार और अन्वेषण करने के लिए एक + संकेत है। यह क्लिपबोर्ड में सभी को कॉपी करने का एक तरीका है?

जवाबों:


192

तत्काल विंडो में, टाइप करें

?name_of_variable

यह सब कुछ प्रिंट कर देगा , और आप मैन्युअल रूप से कॉपी कर सकते हैं कि कहीं भी आप चाहें, या तत्काल विंडो की लॉगिंग सुविधाओं का उपयोग करके इसे स्वचालित रूप से एक फ़ाइल में लिख सकते हैं।

अद्यतन करें : मुझे लगता है कि आप पूछ रहे थे कि मूल्यों की नेस्टेड संरचना को कॉपी / पेस्ट कैसे किया जाए ताकि आप इसे या तो पाठात्मक रूप से खोज सकें, या ताकि आप इसे साइड पर सहेज सकें और फिर बाद में ऑब्जेक्ट की स्थिति की तुलना करें। यदि मैं सही हूं, तो आप विजुअल स्टूडियो के लिए व्यावसायिक विस्तार की जांच कर सकते हैं, जिसे मैंने बनाया है, जिसे OzCode कहा जाता है , जो आपको "खोज" और "तुलना" सुविधाओं के माध्यम से इन चीजों को अधिक आसानी से करने देता है।

अद्यतन 2 @ ppumkin के प्रश्न का उत्तर देने के लिए, या नए EAP में एक नई निर्यात सुविधा है जो उपयोगकर्ताओं को Json, XML, Excel, या C # कोड के चर मानों को निर्यात करने की अनुमति देती है।

पूर्ण प्रकटीकरण: मैं यहां वर्णित टूल का सह-निर्माता हूं।


5
यह सब कुछ दिखाने के लिए पुनरावर्ती विस्तार कर सकता है तो और भी बेहतर होगा। यह बहुत सारे पाठ हो सकते हैं लेकिन मैं संभवतः इसे पेड़ में गहराई से खोज करने के लिए खोज करूंगा।
कोबस स्मिट

3
PS मुझे बगैद की सुविधाएँ बहुत पसंद हैं। अब ट्रेल डाउनलोड कर रहा है और जब यह समाप्त हो जाता है और मैं अपनी आंखें खोलना शुरू कर देता हूं, तो मेरे बॉस इसे मेरे लिए खरीद लेंगे .. :)
पिय्रूट कुला

16
किसी को पता है कि 100 से अधिक वस्तुओं का उत्पादन कैसे करें? मैं इसे पहले 100 तत्काल खिड़की में प्रदर्शित होने के बाद प्राप्त करता हूं: <More ... (335 वस्तुओं में से पहला 100 प्रदर्शित किया गया था।)>
lachs

6
वास्तव में "तत्काल खिड़की" का क्या अर्थ है?
एलेक्स

3
@alex: विजुअल स्टूडियो में, डिबग> विंडोज> इमीडिएट पर जाएं - यह आपको डीबगिंग के दौरान मूल्यांकन या निष्पादित करने के लिए अभिव्यक्ति दर्ज करने की अनुमति देता है
जेटी

49

आप तत्काल विंडो में कोड के नीचे भाग सकते हैं और यह एक एक्सएमएल फ़ाइल को किसी वस्तु के क्रमबद्ध XML प्रतिनिधित्व को निर्यात करेगा:

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

स्रोत: विज़ुअल स्टूडियो, डिबगर से ऑब्जेक्ट को कैसे सीरियल करना है


5
इसे अपग्रेड किया जाना चाहिए ताकि लोग इसे और आसानी से पा सकें। मैंने इस महान समाधान को खोजने से पहले बहुत सारे इसी तरह के एसओ प्रश्नों के माध्यम से जगाया, जिसने मुझे एक दुर्लभ क्रैश समस्या के साथ लंबे समय से चल रहे कार्यक्रम के दुर्घटनाग्रस्त होने के बाद एक बड़ी सूची <सूची <बाइट >> को xml पाठ फ़ाइल में डंप करने की अनुमति दी। बस एक जोड़: जब मैंने पहली बार इसे चलाया तो मुझे एक त्रुटि मिली: "मूल्यांकन के लिए अस्थायी रूप से चलने के लिए एक थ्रेड की आवश्यकता होती है। मूल्यांकन करने के लिए वॉच विंडो का उपयोग करें।" वॉच विंडो को रिफ्रेश करने के बाद, कमांड चलाने का दूसरा प्रयास सफल रहा।
क्रेग.फ्रीड

बैट_प्रोग्रामर: आप अपने उत्तर की पहली पंक्ति को बदलना चाह सकते हैं, क्योंकि यह बताता है कि आउटपुट क्या होगा ऑब्जेक्ट्स की एक सूची है, जबकि वास्तव में आउटपुट क्या है एक एकल निर्दिष्ट ऑब्जेक्ट (चर) का क्रमबद्ध XML प्रतिनिधित्व है।
क्रेग.फाइड

Cannot evaluate expression because the code of the current method is optimized.???
फाल्को अलेक्जेंडर

यदि आपके पास File.WriteAllText(@"c:\movie.json", JsonConvert.SerializeObject(movie));
जसन है

The debugger is unable to evaluate this expression। मैं विजुअल स्टूडियो 2019 का उपयोग कर रहा हूं; मैंने objचर नाम के साथ प्रतिस्थापित किया है जो टाइप हैSystem.Collections.Generic.List 1[[System.ValueTuple 3[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e],[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e],[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7]]
ड्रू

27

एक हालिया एक्सटेंशन ऑब्जेक्ट एक्सपोर्टर है जो इसे आसानी से करता है।

http://www.omarelabd.net/exporting-objects-from-the-visual-studio-debugger/

विस्तार: https://visualstudiogallery.msdn.microsoft.com/c6a21c68-f815-4895-999f-cd0885d8774f


1
वस्तुओं की बड़ी सूची के लिए समस्याएं देने लगता है
बैट_प्रोग्रामर

@Bat_Programmer किसी भी तरह से उमर के अद्भुत उपकरण का उपयोग करने से हतोत्साहित न करें, कृपया ध्यान दें कि ऑब्जेक्ट की विशाल सूची का समर्थन करने के लिए ओज़कोड एक्सपोर्ट फीचर को ठीक-ठीक ट्यून किया गया है। कृपया इसे आज़माएँ और मुझे बताएं कि क्या यह आपके लिए अच्छा है।
ओमेर रविव

20

आप उस ऑब्जेक्ट के लिए एक घड़ी जोड़ सकते हैं, और घड़ी की खिड़की में, उस चीज का विस्तार और चयन कर सकते हैं जिसे आप कॉपी करना चाहते हैं और फिर कॉपी करें।


1
धन्यवाद पीएमएन जिसने मेरी भी मदद की। पेड़ को मैन्युअल रूप से विस्तारित करके (अच्छा होगा यदि एक सही क्लिक था, सभी का विस्तार करें) और फिर इसे क्लिपबोर्ड पर कॉपी करते हुए, मैं फिर इसे पेस्ट कर सकता हूं और उस मूल्य की खोज कर सकता हूं जो मैं पेड़ में नीचे देख रहा हूं।
कोबस स्मिट

10

Https://stackoverflow.com/a/23362097/2680660 से सर्वाधिक लोकप्रिय उत्तर :

किसी भी भाग्य के साथ आपके पास पहले से ही Json.Net है। किस स्थिति में इसे अपनी तत्काल विंडो में पॉप करें:

Newtonsoft.Json.JsonConvert.SerializeObject(someVariable)

4

का उपयोग करके अपनी कक्षाओं और तरीकों को सजाने के लिए गुण आप के साथ डिबगिंग के दौरान अपने वस्तु प्रदर्शन से एक विशिष्ट मूल्य हो सकता है DebuggerDisplay विशेषता जैसे

[DebuggerDisplay("Person - {Name} is {Age} years old")]
public class Person
{
  public string Name { get; set; }
  public int Age { get; set; }
}

बात यह है, मुझे सभी ऑब्जेक्ट सामग्री की प्रतिलिपि बनाने में सक्षम होना चाहिए, और उनमें से कुछ को नहीं। हां, मैं पूरे ऑब्जेक्ट के साथ एक पर्याप्त पर्याप्त डिबगडिजरप्ले विशेषता का निर्माण कर सकता हूं, लेकिन कक्षा में किसी भी बदलाव के साथ-साथ विशेषता में भी बदलाव की आवश्यकता होगी।
Farinha

@ फरिनाहा आप वस्तु के साथ क्या करना चाहती हैं? शायद एक संपत्ति हो सकती है जो इसका क्रमबद्ध xml संस्करण है।
डेव एंडरसन

1

Google ने मुझे 8 साल पुराने इस प्रश्न की ओर अग्रसर किया और मैंने डेब्यूपर का उपयोग करते हुए डेब्यू डेटा को कॉपी-पेस्ट करने के लिए कुछ समान हासिल किया। यह एक हवा थी।

मुझे पता है कि विशेष रूप से जानकारी के बारे में पूछा गया प्रश्न डिबगर , लेकिन ObjectDumper जानकारी मूलतः एक ही है कि देता है। मैं मान रहा हूं कि जो लोग इस सवाल को गूगल करते हैं, वे मेरे जैसे हैं और बस डिबगिंग उद्देश्यों के लिए डेटा की आवश्यकता है और परवाह नहीं है कि यह तकनीकी रूप से डीबगर से आता है या नहीं।


1

मैं हमेशा उपयोग करता हूं:

string myJsonString = JsonConvert.SerializeObject(<some object>);

फिर मैं स्ट्रिंग मान की प्रतिलिपि बनाता हूं जो दुर्भाग्य से पीछे के स्लैश को भी कॉपी करता है।

बैकलैश को हटाने के लिए यहां जाएं : https://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_replace

फिर <p id="demo">Visit Microsoft!</p>तत्व के भीतर पाठ को आपके द्वारा कॉपी किए गए पाठ से बदल दें। उसके बाद var res = str.replace("Microsoft", "W3Schools");लाइन को बदलें

var res = str.replace(/\\/g, '')

इन नए परिवर्तनों को चलाएं लेकिन दाईं ओर "कोशिश करें" बटन पर क्लिक करना न भूलें।

अब आपके पास json फॉर्मेट में ऑब्जेक्ट का सभी टेक्स्ट होना चाहिए जिसे आप http://jsonformatter.org जैसे json फॉर्मैटर में छोड़ सकते हैं या POCO बनाने के लिए अब आप http://json2csharp.com/ का उपयोग कर सकते हैं


1

मुझे पता है कि मुझे पार्टी में थोड़ी देर हो गई है, लेकिन मैंने किसी ऑब्जेक्ट को क्रमबद्ध करने के लिए JSON कार्यान्वयन लिखा है, अगर आप JSON आउटपुट लेना पसंद करते हैं। Newtonsoft.Json संदर्भ का उपयोग करता है।

private static void WriteDebugJSON (dynamic obj, string filePath)
{
    using (StreamWriter d = new StreamWriter(filePath))
    {
        d.Write(JsonConvert.SerializeObject(obj));
    }
}

0

यदि आपके पास एक सूची है और आप एक विशिष्ट चर खोजना चाहते हैं: तत्काल विंडो में, टाइप करें

 myList.Any(s => s.ID == 5062);

अगर यह सच है

var myDebugVar = myList.FirstOrDefault(s => s.ID == 5062);
?myDebugVar

0

मैंने अभी चर पर क्लिक किया है और AddWatch का चयन किया है , जो सभी मूल्यों से युक्त वॉच विंडो ला रहा है। मैंने सभी को चुना और एक पाठ संपादक में एक पाठ में पेस्ट किया, बस।


1
समस्या यह है कि जिस तरह से आपको नोड द्वारा नोड का विस्तार करने की आवश्यकता है, उसे कॉपी करें और मेरे पास 145 नोड्स हैं
derloopkat
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.