Aracılığıyla paylaş


Watch pencereleri ve QuickWatch ile değişkenleri izleme

Hata ayıklarken, değişkenleri ve ifadeleri izlemek için Gözcü pencerelerini ve QuickWatch'ı kullanabilirsiniz. Pencereler yalnızca hata ayıklama oturumu sırasında kullanılabilir.

Windows'un hata ayıklama sırasında aynı anda birkaç değişken görüntüleyebildiğini izleyin . QuickWatch iletişim kutusu tek seferde tek bir değişken görüntüler ve hata ayıklamanın devam etmesi için kapatılmalıdır. QuickWatch kullanma hakkında daha fazla bilgi için bkz . QuickWatch ile tek bir değişkeni veya ifadeyi gözlemleme.

Dekont

Kodda ilk kez hata ayıklamayı denediyseniz, bu makaleye geçmeden önce mutlak yeni başlayanlar için hata ayıklama ve Hata ayıklama teknikleri ve araçları makalesini okumak isteyebilirsiniz.

İzleme penceresiyle değişkenleri gözlemleme

Birden fazla gözcü penceresi açabilir ve bir Gözcü penceresinde birden fazla değişken gözlemleyebilirsiniz.

Örneğin, aşağıdaki kodda , bve c değerleri aüzerinde bir saat ayarlamak için:

int main()
{
    int a, b, c;
    a = 1;
    b = 2;
    c = 0;

    for (int i = 0; i < 10; i++)
    {
        a++;
        b *= 2;
        c = a + b;
    }

    return 0;
}

  1. Sol kenar boşluğuna c = a + b; tıklayarak, Hata Ayıklama>Kesme Noktası'nı seçerek veya F9 tuşuna basarak satırda bir kesme noktası ayarlayın.

  2. Yeşil Başlangıç okunu veya Hata Ayıklama Hata Ayıklama Hata Ayıklama'yı>seçerek hata ayıklamaya başlayın veya F5 tuşuna basın. Yürütme kesme noktasında duraklatılır.

  3. Windows>Watch Watch>1'de Hata Ayıkla'yı>seçerek veya Ctrl+Alt+W>1 tuşlarına basarak bir Gözcü penceresi açın.

    Windows 2, 3 veya 4'i seçerek ek Watch pencereleri açabilirsiniz.

  4. gözcü penceresinde boş bir satır seçin ve değişkeni ayazın. ve ciçin b de aynısını yapın.

    Screenshot of Watch variables.

    Screenshot of Watch variables.

  5. Hata Ayıklama>Adımı'na tıklayarak veya ilerlemek için F11'e basarak hata ayıklamaya devam edin. İzleme penceresindeki değişken değerleri, döngüde for yinelenirken değişir.

Dekont

Yalnızca C++ için

  • Değişken adının bağlamını veya değişken adı kullanan bir ifadeyi nitelemeniz gerekebilir. Bağlam, bir değişkenin bulunduğu işlev, kaynak dosya veya modüldür. Bağlamı nitelemeniz gerekiyorsa, İzleme penceresindeki Ad bölümünde bağlam işleci (C++) söz dizimini kullanın.

  • İzleme penceresindeki Ad alanına $<register name veya @<register name> > kullanarak yazmaç adları ve değişken adları ekleyebilirsiniz. Daha fazla bilgi için bkz . Pseudovariables.

gözcü penceresinde ifadeleri kullanma

Bir Gözcü penceresinde hata ayıklayıcı tarafından tanınan geçerli ifadeleri gözlemleyebilirsiniz.

Örneğin, önceki bölümde yer alan kod için İzleme penceresine girerek (a + b + c) / 3 üç değerin ortalamasını alabilirsiniz:

Screenshot of Watch expression.

Screenshot of Watch expression.

İzleme penceresinde ifadeleri değerlendirme kuralları genellikle kod dilinde ifadeleri değerlendirme kurallarıyla aynıdır. İfadede söz dizimi hatası varsa, kod düzenleyicisindekiyle aynı derleyici hatasını bekleyebilirsiniz. Örneğin, önceki ifadedeki bir yazım hatası gözcü penceresinde şu hatayı oluşturur:

Screenshot of Watch expression error.

Screenshot of Watch expression error.

Gözcü penceresinde iki dalgalı çizgi simgesine sahip bir daire görünebilir. Bu simge, hata ayıklayıcının olası bir iş parçacığı arası bağımlılık nedeniyle ifadeyi değerlendirmediği anlamına gelir. Kodu değerlendirmek için uygulamanızdaki diğer iş parçacıklarının geçici olarak çalışması gerekir, ancak kesme modunda olduğunuzdan, uygulamanızdaki tüm iş parçacıkları genellikle durdurulur. Diğer iş parçacıklarının geçici olarak çalışmasına izin vermek uygulamanızın durumu üzerinde beklenmeyen etkilere neden olabilir ve hata ayıklayıcı bu iş parçacıklarındaki kesme noktaları ve özel durumlar gibi olayları yoksayabilir.

Gözcü penceresinde arama

Her pencerenin üzerindeki arama çubuğunu kullanarak gözcü penceresinin Ad, Değer ve Tür sütunlarında anahtar sözcükleri arayabilirsiniz. Enter tuşuna basın veya bir arama yürütmek için oklardan birini seçin. Devam eden bir aramayı iptal etmek için arama çubuğundaki "x" simgesini seçin.

Bulunan eşleşmeler arasında gezinmek için sol ve sağ okları (sırasıyla Shift+F3 ve F3) kullanın.

Screenshot of Search in Watch Window.

Aramanızı daha fazla veya daha az kapsamlı hale getirmek için, İç içe nesnelerde arama yapmak istediğiniz düzey derinliğini seçmek için İzleme penceresinin üst kısmındaki Daha Derin Ara açılan listesini kullanın.

İzleme penceresinde özellikleri sabitleme

Dekont

Bu özellik .NET Core 3.0 veya üzeri sürümlerde desteklenir.

Sabitlenebilir Özellikler aracıyla İzleme penceresinde nesneleri özelliklerine göre hızla inceleyebilirsiniz. Bu aracı kullanmak için bir özelliğin üzerine gelin ve görüntülenen raptiye simgesini seçin veya sağ tıklayın ve sonuçta elde edilen bağlam menüsünde Üyeyi Sık Kullanılan Olarak Sabitle seçeneğini belirleyin. Bu özellik, nesnenin özellik listesinin en üstüne kadar kabarcık oluşturur ve özellik adı ve değeri Değer sütununda görüntülenir. Bir özelliğin sabitlemesini kaldırmak için raptiye simgesini yeniden seçin veya bağlam menüsünde Üyeyi Sık Kullanılan Olarak Kaldır seçeneğini belirleyin.

Screenshot of Pin properties in the Watch window.

Ayrıca, İzleme penceresinde nesnenin özellik listesini görüntülerken özellik adlarını değiştirebilir ve sabitlenmemiş özellikleri filtreleyebilirsiniz. İzleme penceresinin üzerindeki araç çubuğundaki düğmeleri seçerek her iki seçeneğe de erişebilirsiniz.

İzleme değerlerini yenileme

bir ifade değerlendirildiğinde gözcü penceresinde bir yenileme simgesi (dairesel ok) görüntülenebilir. Yenileme simgesi bir hatayı veya güncel olmayan bir değeri gösterir.

Değeri yenilemek için yenile simgesini seçin veya ara çubuğuna basın. Hata ayıklayıcısı ifadeyi yeniden değerlendirmeye çalışır. Ancak, değerin neden değerlendirilmediğine bağlı olarak ifadeyi yeniden değerlendirmek istemeyebilir veya yeniden değerlendiremeyebilirsiniz.

yenileme simgesinin üzerine gelin veya ifadenin değerlendirilmemiş olmasının nedeni için Değer sütununa bakın. Nedenler şunlardır:

  • Önceki örnekte olduğu gibi ifade değerlendirilirken bir hata oluştu. Zaman aşımı oluşabilir veya bir değişken kapsamın dışında olabilir.

  • İfade, uygulamada yan etkiyi tetikleyebilecek bir işlev çağrısına sahiptir. Bkz. İfade yan efektleri.

  • Özelliklerin ve örtük işlev çağrılarının otomatik değerlendirmesi devre dışı bırakılır.

Özelliklerin ve örtük işlev çağrılarının otomatik değerlendirmesi devre dışı bırakıldığından yenileme simgesi görüntülenirse, Araçlar>Seçenekler>Hata Ayıklama>Genel'de Özellik değerlendirmesini ve diğer örtük işlev çağrılarını etkinleştir'i seçerek etkinleştirebilirsiniz.

Yenileme simgesini kullanmayı göstermek için:

  1. Araçlar>Seçenekler>Hata Ayıklama>Genel'de Özellik değerlendirmesini ve diğer örtük işlev çağrılarını etkinleştir onay kutusunu temizleyin.

  2. Aşağıdaki kodu girin ve gözcü penceresinde özelliğinde list.Count bir saat ayarlayın.

    static void Main(string[] args)
    {
        List<string> list = new List<string>();
        list.Add("hello");
        list.Add("goodbye");
    }
    
  3. Hata ayıklamayı başlatın. gözcü penceresinde aşağıdaki iletiye benzer bir şey gösterilir:

    Screenshot of Refresh Watch.

    Screenshot of Refresh Watch.

  4. Değeri yenilemek için yenile simgesini seçin veya ara çubuğuna basın. Hata ayıklayıcısı ifadeyi yeniden değerlendirir.

İfade yan efektleri

Bazı ifadelerin değerlendirilmesi bir değişkenin değerini değiştirebilir veya uygulamanızın durumunu başka bir şekilde etkileyebilir. Örneğin, aşağıdaki ifadenin değerlendirilmesi değerini var1değiştirir:

var1 = var2

Bu kod bir yan etkiye neden olabilir. Yan etkiler, uygulamanızın çalışma şeklini değiştirerek hata ayıklamayı zorlaştırabilir.

Yan etkileri olan bir ifade, ilk girdiğinizde yalnızca bir kez değerlendirilir. Bundan sonra, gözcü penceresinde ifade gri görünür ve diğer değerlendirmeler devre dışı bırakılır. Araç ipucu veya Değer sütunu, ifadenin yan etkiye neden olduğunu açıklar. Değerin yanında görünen yenileme simgesini seçerek yeniden değerlendirmeye zorlayabilirsiniz.

Yan etki atamasını önlemenin bir yolu, otomatik işlev değerlendirmesini kapatmaktır. Araçlar>Seçenekler>Hata Ayıklama>Genel'de Özellik değerlendirmesini ve diğer örtük işlev çağrılarını etkinleştir'in seçimini kaldırın.

Yalnızca C# için, özelliklerin veya örtük işlev çağrılarının değerlendirmesi kapatıldığında, İzleme penceresinde bir değişken Adı'na ac biçimi değiştiricisini ekleyerek değerlendirmeyi zorlayabilirsiniz. Bkz. C# dilinde biçim tanımlayıcıları.

İzleme penceresinde Nesne Kimliklerini kullanma (C# ve Visual Basic)

Bazen belirli bir nesnenin davranışını gözlemlemek istersiniz. Örneğin, bu değişken kapsam dışına çıktıktan sonra yerel değişken tarafından başvuruda bulunılan bir nesneyi izlemek isteyebilirsiniz. C# ve Visual Basic'te, başvuru türlerinin belirli örnekleri için Nesne Kimlikleri oluşturabilir ve bunları gözcü penceresinde ve kesme noktası koşullarında kullanabilirsiniz. Nesne Kimliği, ortak dil çalışma zamanı (CLR) hata ayıklama hizmetleri tarafından oluşturulur ve nesneyle ilişkilendirilir.

Dekont

Nesne kimlikleri, nesnenin çöp toplamasını engellemeyen zayıf başvurular oluşturur. Bunlar yalnızca geçerli hata ayıklama oturumu için geçerlidir.

Aşağıdaki kodda MakePerson() yöntemi, yerel değişken kullanarak bir Person oluşturur:

class Person
{
    public Person(string name)
    {
        Name = name;
    }
    public string Name { get; set; }
}

public class Program
{
    static List<Person> _people = new List<Person>();
    public static void Main(string[] args)
    {
        MakePerson();
        DoSomething();
    }

    private static void MakePerson()
    {
        var p = new Person("Bob");
        _people.Add(p);
    }

    private static void DoSomething()
    {
        // more processing
         Console.WriteLine("done");
    }
}

yöntemindeki öğesinin Person adını bulmak için, İzleme penceresinde Nesne Kimliği'ne Person bir başvuru ekleyebilirsiniz.DoSomething()

  1. Nesne oluşturulduktan sonra Person kodda bir kesme noktası ayarlayın.

  2. Hata ayıklamayı başlatın.

  3. Yürütme kesme noktasında duraklatıldığında, Windows>YerelLerinde Hata Ayıkla'yı>seçerek Yereller penceresini açın.

  4. Yerel Ayarlar penceresinde değişkene Person sağ tıklayın ve Nesne Kimliği Oluştur'a tıklayın.

    Yerel Ayarlar penceresinde Nesne Kimliği olan bir dolar işareti ($) ve bir sayı görmeniz gerekir.

  5. Nesne Kimliği'ne sağ tıklayıp gözcü ekle'yi seçerek nesne kimliğini İzleme penceresine ekleyin.

  6. yönteminde DoSomething() başka bir kesme noktası ayarlayın.

  7. Hata ayıklamaya devam edin. Yönteminde DoSomething() yürütme duraklatıldığında, İzleme penceresi nesneyi görüntüler Person .

    Dekont

    Nesnesinin özelliklerini görmek istiyorsanız, örneğinPerson.Name, Araçlar>Seçenekler>Hata Ayıklama>Genel>Etkinleştir özellik değerlendirmesini ve diğer örtük işlev çağrılarını seçerek özellik değerlendirmesini etkinleştirmeniz gerekir.

Dinamik Görünüm ve İzleme penceresi

Bazı betik dilleri (örneğin, JavaScript veya Python) dinamik veya ördek yazma kullanır ve .NET sürüm 4.0 ve üzeri, normal hata ayıklama pencerelerinde gözlemlenmesi zor nesneleri destekler.

İzleme penceresinde bu nesneler, arabirimi uygulayan IDynamicMetaObjectProvider türlerden oluşturulan dinamik nesneler olarak görüntülenir. Dinamik nesne düğümleri, dinamik nesnelerin dinamik üyelerini gösterir, ancak üye değerlerinin düzenlenmesine izin vermez.

Dinamik Görünüm değerlerini yenilemek için dinamik nesne düğümünü yanındaki yenile simgesini seçin.

Bir nesnenin yalnızca Dinamik Görünümü'nü görüntülemek için, İzleme penceresinde dinamik nesne adından sonra dinamik biçim tanımlayıcısı ekleyin:

  • C# için: ObjectName, dynamic
  • Visual Basic için: $dynamic, ObjectName

Dekont

  • Bir sonraki kod satırına geçtiğinizde, C# hata ayıklayıcısı Dinamik Görünüm'deki değerleri otomatik olarak yeniden değerlendirmez.
  • Visual Basic hata ayıklayıcısı, Dinamik Görünüm aracılığıyla eklenen ifadeleri otomatik olarak yeniler.
  • Dinamik Görünümün üyelerini değerlendirmenin yan etkileri olabilir.

Bir nesneyi dinamik bir nesneye dönüştüren yeni bir izleme değişkeni eklemek için:

  1. Dinamik Görünümün herhangi bir alt öğesine sağ tıklayın.
  2. Gözcü Ekle'yi seçin. yeni object.name bir Gözcü penceresinde olur ((dynamic) object).name ve görüntülenir.

Hata ayıklayıcı, nesnenin Dinamik Görünüm alt düğümünü De Otomatikler penceresine ekler. Otomatikler penceresini açmak için hata ayıklama sırasında Windows>Otomatik Hata Ayıklama'yı>seçin.

Dinamik Görünüm ayrıca COM nesneleri için hata ayıklamayı geliştirir. Hata ayıklayıcı System.__ComObject sarmalanmış bir COM nesnesine ulaştığında, nesne için dinamik görünüm düğümü ekler.

QuickWatch ile tek bir değişkeni veya ifadeyi gözlemleme

Tek bir değişkeni gözlemlemek için QuickWatch'ı kullanabilirsiniz.

Örneğin, aşağıdaki kod için:

static void Main(string[] args)
{
    int a, b;
    a = 1;
    b = 2;
    for (int i = 0; i < 10; i++)
    {
        a = a + b;
    }
}

Değişkeni gözlemlemek a için

  1. Satırda a = a + b; bir kesme noktası ayarlayın.

  2. Hata ayıklamayı başlatın. Yürütme kesme noktasında duraklatılır.

  3. Kodda değişkenini a seçin.

  4. QuickWatch Hatalarını Ayıkla'yı>seçin, Shift+F9 tuşuna basın veya sağ tıklayıp QuickWatch'ı seçin.

    QuickWatch iletişim kutusu görüntülenir. Değişken, a 1 değeriyle İfade kutusundadır.

    Screenshot of QuickWatch variable.

    Screenshot of QuickWatch variable.

  5. Değişkeni kullanarak bir ifadeyi değerlendirmek için İfade kutusuna gibi a + b bir ifade yazın ve Yeniden Değerlendir'i seçin.

    Screenshot of QuickWatch expression.

    Screenshot of QuickWatch expression.

  6. QuickWatch'tan saat penceresine değişken veya ifade eklemek için Gözcü Ekle'yi seçin.

  7. QuickWatch penceresini kapatmak için Kapat'ı seçin. (QuickWatch kalıcı bir iletişim kutusudur, bu nedenle açık olduğu sürece hata ayıklamaya devam edebilirsiniz.)

  8. Hata ayıklamaya devam edin. İzleme penceresinde değişkeni gözlemleyebilirsiniz.