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 , b
ve 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;
}
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.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.
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.
gözcü penceresinde boş bir satır seçin ve değişkeni
a
yazın. vec
içinb
de aynısını yapın.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:
İ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:
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.
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.
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:
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.
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"); }
Hata ayıklamayı başlatın. gözcü penceresinde aşağıdaki iletiye benzer bir şey gösterilir:
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 var1
değ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()
Nesne oluşturulduktan sonra
Person
kodda bir kesme noktası ayarlayın.Hata ayıklamayı başlatın.
Yürütme kesme noktasında duraklatıldığında, Windows>YerelLerinde Hata Ayıkla'yı>seçerek Yereller penceresini açın.
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.
Nesne Kimliği'ne sağ tıklayıp gözcü ekle'yi seçerek nesne kimliğini İzleme penceresine ekleyin.
yönteminde
DoSomething()
başka bir kesme noktası ayarlayın.Hata ayıklamaya devam edin. Yönteminde
DoSomething()
yürütme duraklatıldığında, İzleme penceresi nesneyi görüntülerPerson
.Dekont
Nesnesinin özelliklerini görmek istiyorsanız, örneğin
Person.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:
- Dinamik Görünümün herhangi bir alt öğesine sağ tıklayın.
- 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
Satırda
a = a + b;
bir kesme noktası ayarlayın.Hata ayıklamayı başlatın. Yürütme kesme noktasında duraklatılır.
Kodda değişkenini
a
seçin.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.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.QuickWatch'tan saat penceresine değişken veya ifade eklemek için Gözcü Ekle'yi seçin.
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.)
Hata ayıklamaya devam edin. İzleme penceresinde değişkeni gözlemleyebilirsiniz.