Visual Studio hata ayıklama modunda nesne değerlerini kopyalama


139

Visual Studio hata ayıklama modunda, değerlerini göstermek için fareyle değişkenlerin üzerine gelip "Kopyala", "Kopyala İfadesi" veya "Kopyala Değeri" için sağ tıklayabilirsiniz.

Değişkenin yalnızca temel bir tür değil, bir nesne olması durumunda, nesneyi genişletmek ve keşfetmek için bir + işareti vardır. Tüm bunları panoya kopyalamanın bir yolu var mı?

Yanıtlar:


192

Hemen pencereye şunu yazın

?name_of_variable

Bu, her şeyi yazdırır ve istediğiniz yere manuel olarak kopyalayabilir veya otomatik olarak bir dosyaya yazmak için hemen pencerenin günlük özelliklerini kullanabilirsiniz.

GÜNCELLEME : Değerlerin iç içe yapısının nasıl kopyalanacağını / yapıştırılacağını sorduğunuzu varsayıyorum, böylece metin olarak arayabilir veya yan tarafa kaydedip daha sonra nesnenin durumunu onunla karşılaştırabilirsiniz. Haklıysam , oluşturduğum Visual Studio'nun OzCode adlı ticari uzantısına göz atmak isteyebilirsiniz , bu da bunları "Ara" ve "Karşılaştır" özellikleriyle çok daha kolay bir şekilde yapmanıza olanak tanır.

GÜNCELLEME 2 @ ppumkin'in sorusunu yanıtlamak için veya yeni EAP'nin yeni bir Dışa Aktar özelliği vardır, kullanıcıların değişken değerlerini Json, XML, Excel veya C # koduna Dışa Aktarmasını sağlar.

Tam açıklama: Ben burada tarif ettiğim aracın ortak yaratıcısıyım.


5
Her şeyi göstermek için özyinelemeli olarak genişleseydi daha iyi olurdu. Çok fazla metin olabilir, ancak muhtemelen ağacın derinliklerinde bir değer aramak için olurdu.
Kobus Smit

3
PS Bugaid özelliklerini çok seviyorum. şimdi iz indirmek ve süresi sona erdiğinde ve gözbebeklerimi ölçmeye başladığımda patronumun benim için satın almasını sağlayacaktır .. :)
Piotr Kula

16
100'den fazla ürün çıkışı nasıl bilen var mı? Ben komut penceresi içinde görüntülenen edilmiş ilk 100'e sonra bu olsun: <Devamı ... (. İlk 100 335 kalemleri sergilendi)>
lachs

6
"Anlık pencere" ile tam olarak ne kastedilmektedir?
alex

3
@alex: Visual Studio'da Hata Ayıkla> Windows> Hemen Git - Hata ayıklama sırasında değerlendirilecek veya yürütülecek ifadeleri girmenize olanak tanır
JTech

49

Hemen pencerede aşağıdaki kodu çalıştırabilirsiniz ve bir nesnenin serileştirilmiş XML temsilini bir xml dosyasına aktaracaktır:

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

Kaynak: Visual Studio hata ayıklayıcıdan nesnenin serileştirilmesi


5
Bu, kullanıcıların daha kolay bulabilmesi için kaldırılmalıdır. Nadir bir kilitlenme sorunu olan uzun süren bir programın çökmesinden sonra büyük bir Liste <Liste <bayt>> bir xml metin dosyasına dökümü sağlayan bu harika çözümü bulmadan önce benzer SO soruları arasında dolaştım. Sadece bir ek: ilk çalıştırdığımda bir hata aldım: "Değerlendirme geçici olarak çalıştırmak için bir iş parçacığı gerektirir. Değerlendirme gerçekleştirmek için İzle penceresini kullanın." İzleme penceresini yeniledikten sonra, komutu çalıştırmak için ikinci bir deneme başarılı oldu.
Craig.Feied

Bat_Programmer: Cevabınızın ilk satırını değiştirmek isteyebilirsiniz, çünkü çıktının ne olacağını bir nesne listesi olarak gösterirken, gerçekten çıkmakta olan tek bir belirtilen nesnenin (değişken) serileştirilmiş XML temsilidir.
Craig.Feied

Cannot evaluate expression because the code of the current method is optimized.???
Falco Alexander

Json varsa o zaman aşağıdakileri yapabilirsiniz:File.WriteAllText(@"c:\movie.json", JsonConvert.SerializeObject(movie));
user890332

The debugger is unable to evaluate this expression. Visual Studio 2019 kullanıyorum; objDeğişken adı ile değiştirdimSystem.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]]
Drew

27

1
Nesnelerin daha büyük listesi için sorun veriyor gibi görünüyor
Bat_Programmer

@Bat_Programmer Omar'ın harika aracını kullanmaktan hiçbir şekilde vazgeçmemek için lütfen OzCode Export özelliğinin çok sayıda nesne listesini destekleyecek şekilde ayarlandığını unutmayın. Lütfen deneyin ve size uygun olup olmadığını bildirin.
Omer Raviv

20

Bu nesne için bir saat ekleyebilir ve izleme penceresinde kopyalamak istediğiniz her şeyi genişletip seçip kopyalayabilirsiniz.


1
Teşekkürler PMN de bana yardımcı oldu. El ile ağacı genişleterek (sağ tıklama olsaydı iyi olurdu, hepsini genişletin) ve sonra panoya kopyalayarak, daha sonra yapıştırabilir ve ağacın derinliklerine baktığım bir değeri arayabilirim.
Kobus Smit


4

Kullanarak sizin sınıfları ve yöntemleri süslemek için özelliklerini sizinle ayıklama sırasında nesne ekranından belirli bir değere sahip olabilir DebuggerDisplay nitelik ör

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

Mesele şu ki, sadece bazılarını değil, tüm nesne içeriğini de kopyalayabilmem gerekiyor. Evet, tüm nesne ile yeterince karmaşık bir DebbuggerDisplay özniteliği oluşturabilirim, ancak sınıftaki herhangi bir değişikliğin öznitelikte de değişmesi gerekir.
Farinha

@Farinha Nesne ile ne yapmak istiyorsunuz? Belki de seri hale getirilmiş xml sürümü olan bir özelliğe sahip olabilir.
Dave Anderson

1

Google beni bu 8 yaşındaki soruya yönlendirdi ve ben de kopya yapıştırıcı hata ayıklayıcı verilerine çok benzer bir şey elde etmek için ObjectDumper'ı kullandım . Bir esinti oldu.

Özellikle hata ayıklayıcıdan bilgi hakkında sorulan soruyu biliyorum , ancak ObjectDumper temelde aynı bilgi verir. Bu soruyu google'ın benim gibi olduğunu ve sadece hata ayıklama amacıyla verilere ihtiyaç duyduğunu ve teknik olarak hata ayıklayıcıdan gelip gelmediğini umursamıyorum.


1

Her zaman kullanıyorum:

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

Sonra ne yazık ki arka eğik çizgiler kopyalar dize değerini kopyalayın.

Boşlukları kaldırmak için buraya gidin: https://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_replace

Ardından, <p id="demo">Visit Microsoft!</p>öğenin içindeki metni kopyaladığınız metinle değiştirin. sonra var res = str.replace("Microsoft", "W3Schools");satırı

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

Bu yeni değişiklikleri çalıştırın, ancak sağ taraftaki "dene" düğmesini tıklamayı unutmayın.

Şimdi, nesnenin tüm metnini http://jsonformatter.org gibi bir json formatlayıcıya bırakabileceğiniz veya bir POCO oluşturmak için http://json2csharp.com/ kullanabilirsiniz.


1

Partiye biraz geç kaldığımı biliyorum, ancak JSON çıktısını almayı tercih ederseniz, bir nesneyi serileştirmek için bir JSON uygulaması yazdım. Newtonsoft.Json referansını kullanır.

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

0

bir listeniz varsa ve belirli bir değişkeni bulmak istiyorsanız: Hemen pencereye şunu yazın:

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

bu doğruysa

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

0

Değişkene sağ tıkladım ve AddWatch'i seçtim , tüm değerlerden oluşan izleme penceresini açtım . Hepsini seçtim ve bir metne metin editörü yapıştırdım, hepsi bu.


1
sorun, düğümü düğümü ile düğüm genişletmek için gereken şekilde kopyalamak ve 145 düğüm var
derloopkat

0

burada yararlı ipuçları, ben burada bir sonraki ne zaman gelecekte tekrar bu soru sormak için tercih ekleyeceğim. Çıktı dosyaları gerektirmeyen bir uzantı eklemeyi düşünmüyorsanız veya görsel stüdyo için Hex Visualizer uzantısı var, mladen mihajlovic tarafından 2015'ten beri sürümleri yaptı. yerel değişkenler penceresinden nesne. https://marketplace.visualstudio.com/items?itemName=Mika76.HexVisualizer2019 2019 sürümüdür.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.