Visual Studio'da Anlık Pencereyi nasıl kullanıyorsunuz?


121

Anında Pencere, uygulamalarda hata ayıklama için son derece kullanışlı bir araçtır. Bir kırılma noktası bağlamında geçerli olan kod ifadelerini yürütmek ve değerleri incelemek için kullanılabilir. Dil özelliklerini öğrenmek için kod parçacıkları yazmak için de kullanıyorum.

Hemen Pencereyi nasıl kullanıyorsunuz?


Ayrı ayrı Visual Studio komutları yayınlamayı düşünüyorsanız, örnekler için [Anında Pencere] [1] 'ye bakın. Bu, ifadelerin nasıl değerlendirileceğini, ifadelerin nasıl yürütüleceğini, değişken değerlerin nasıl yazdırılacağını vb. [1]: msdn.microsoft.com/en-us/library/f177hahy(VS.80).aspx
TStamper

2
Listesini bulması zor olan bazı özel komutlar var. msdn.microsoft.com/en-us/library/ms171362(v=vs.100).aspx Windbg'nin gücünün bir kısmı mevcuttur. Bir adres verildiğinde en yakın sembolü bulabilirdim. (ln) Bunun aptalca kapatıldığını düşünüyorum. Türleri yapılarda vb. Görüntülemek için windbg'nin dt komutuna sahip olmayı çok isterim. En azından bir listedeki tüm üyeleri değerleri ile almak için bir nesne değişkeni yazabilirsiniz. (bir düğümü açmaya çalışmak yerine, bir düğüm oyununu kapatın.)
kalbr

Visual Studio 2017 için ilgili belgelere bağlantı şu şekildedir
Pac0

Yanıtlar:


130

Visual Studio'da komut penceresi içinde güzel bir özelliği de istemci koduyla adlandırılan özellikle bir yöntemin dönüş değeri değerlendirmek yeteneğidir ama öyle değil değişken atama parçası. Hata Ayıklama modunda, belirtildiği gibi, değişkenlerle etkileşime girebilir ve bunu yapmada önemli bir rol oynayan bellekte ifadeler çalıştırabilirsiniz.

Örneğin, iki sayının toplamını döndüren statik bir yönteminiz varsa, örneğin:

private static int GetSum(int a, int b)
{
    return a + b;
}

Ardından, Hemen Penceresine aşağıdakileri yazabilirsiniz:

? GetSum(2, 4)
6

Gördüğünüz gibi, bu statik yöntemler için gerçekten iyi çalışıyor. Ancak, yöntem statik değilse, o zaman yöntemin ait olduğu nesneye bir başvuru ile etkileşimde bulunmanız gerekir.

Örneğin, sınıfınızın böyle göründüğünü varsayalım:

private class Foo
{
    public string GetMessage()
    {
        return "hello";
    }
}

Nesne zaten bellekte mevcutsa ve kapsam dahilindeyse , geçerli kesme noktanızdan önce (veya en azından kodun hata ayıklama modunda duraklatıldığı her yerden önce) başlatıldığı sürece onu Hemen Pencerede çağırabilirsiniz :

? foo.GetMessage(); // object ‘foo’ already exists
"hello"

Ayrıca, bellekteki mevcut bir örneğe güvenmeden doğrudan yöntemle etkileşim kurmak ve test etmek istiyorsanız , Anında Pencerede kendi örneğinizi başlatabilirsiniz :

? Foo foo = new Foo(); // new instance of ‘Foo’
{temp.Program.Foo}
? foo.GetMessage()
"hello"

Daha fazla değerlendirme, hesaplama vb. Yapmak istiyorsanız, bunu bir adım daha ileri götürebilir ve yöntemin sonuçlarını geçici olarak değişkenlere atayabilirsiniz:

? string msg = foo.GetMessage();
"hello"
? msg + " there!"
"hello there!"

Ayrıca, yeni bir nesne için bir değişken adı bile bildirmek istemiyorsanız ve yalnızca yöntemlerinden / işlevlerinden birini çalıştırmak istiyorsanız, şunu yapın:

? new Foo().GetMessage()
"hello" 

Bir yöntemin değerini görmenin çok yaygın bir yolu, bir sınıfın yöntem adını seçmek ve bir 'İzleme Ekle' yapmaktır, böylece o yöntemin geçerli değerini Gözlem penceresinde görebilirsiniz. Ancak, geçerli bir değerin görüntülenmesi için nesnenin bir kez daha somutlaştırılması ve kapsam içinde olması gerekir. Bu, Anında Pencereyi kullanmaktan çok daha az güçlü ve daha kısıtlayıcıdır.

İnceleme yöntemlerinin yanı sıra, basit matematik denklemleri yapabilirsiniz:

? 5 * 6
30

veya değerleri karşılaştırın:

? 5==6
false
? 6==6
true

Doğrudan Acil Pencerede iseniz, soru işareti ('?') Gereksizdir, ancak netlik için buraya dahil edilmiştir (yazılan ifadeler ile sonuçları ayırt etmek için) Ancak, Komut Penceresindeyseniz ve ihtiyacınız varsa Hemen Pencerede bazı hızlı şeyler yapmak için, ardından ifadelerinizin önüne '?' ve sen git.

Intellisense, Hemen Pencerede çalışır , ancak bazen biraz tutarsız olabilir. Tecrübelerime göre, sadece Hata Ayıklama modunda mevcut gibi görünüyor, ancak tasarım, hata ayıklama olmayan modda değil.

Ne yazık ki, Hemen Pencerenin bir başka dezavantajı, döngüleri desteklememesidir.


1
Nasıl mı bulmak derhal pencere?
jpaugh

1
Ctrl + Alt + Iveya Hata Ayıkla -> Windows -> Hemen
Ray

11

Komutları Yürütmek İçin Hemen Pencereyi Kullanın

Hemen Pencere, komutları yürütmek için de kullanılabilir. Sadece a ve >ardından komutu yazın.

görüntü açıklamasını buraya girin

Örneğin >shell cmd, bir komut kabuğu başlatılacaktır (bu, örneğin, Visual Studio'ya hangi ortam değişkenlerinin geçirildiğini kontrol etmek için yararlı olabilir). >clsekranı temizleyecektir.

Kendi takma adlarına sahip oldukları kadar yaygın olarak kullanılan komutların bir listesi: https://msdn.microsoft.com/en-us/library/c3a0kd3x.aspx


2
güzel ipucu. Aslında, bu, kullandığım başka bir numara ile güzel bir şekilde birleşiyor: >open Filenameseçili dosyayı çözümde açacak ve hatta dosya adı tamamlandı.
Phillip Ngan

6

Hemen penceresi, ifadelerde hata ayıklamak ve değerlendirmek, ifadeleri yürütmek, değişken değerleri yazdırmak vb. İçin kullanılır. Hata ayıklama sırasında geliştirme dili tarafından değerlendirilecek veya çalıştırılacak ifadeler girmenize olanak tanır.

Anında Pencereyi görüntülemek için Hata Ayıkla> Pencereler> Hemen'i seçin veya Ctrl-Alt-I tuşlarına basın

görüntü açıklamasını buraya girin

Hemen Pencereli bir örnek:

int Sum(int x, int y) { return (x + y);}
void main(){
int a, b, c;
a = 5;
b = 7;
c = Sum(a, b);
char temp = getchar();}

kesme noktası ekle

görüntü açıklamasını buraya girin

çağrı komutları

görüntü açıklamasını buraya girin

https://msdn.microsoft.com/en-us/library/f177hahy.aspx

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.