Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu makalede, hata ayıklama verimliliğini artırmak için Visual Studio'da farklı kesme noktası türlerinin nasıl kullanılacağı gösterilmektedir. Kod yürütmesini duraklatma, loglama bilgileri sağlama ve değişken durumlarındaki değişiklikleri izleme gibi kesme noktalarının uygulanabileceği çeşitli senaryoları kapsar. Makalede koşullu kesme noktalarının, izleme noktalarının, veri kesme noktalarının, bağımlı kesme noktalarının ve geçici kesme noktalarının nasıl ayarlanacağı açıklanır. Ayrıca işlev kesme noktalarını ayarlamaya yönelik ayrıntılı yönergeler içerir. Bu kılavuz, Visual Studio'da etkili hata ayıklama için kesme noktalarından yararlanmak isteyen geliştiriciler için önemlidir.
Visual Studio'da kesme noktalarını kullanmayı bilmiyorsanız, bu makaleye geçmeden önce kesme noktalarını kullanmaya başlama bakın.
Bu belgelerle en iyi deneyim için makalenin üst kısmındaki listeden tercih ettiğiniz geliştirme dilini veya çalışma zamanını seçin.
Senaryo
Aşağıdaki tabloda kesme noktaları için yaygın hata ayıklama senaryoları ve senaryo için önerilen kesme noktası türü gösterilmektedir.
Senaryo | Açıklama |
---|---|
Hata içerebilecek bir kod satırını incelemek için kodu çalıştırmayı nasıl duraklatebilirim? | Kesme noktası ayarlayın. Daha fazla bilgi için bkz. kesme noktalarıyla çalışmaya başlama. |
Değişkenimin beklenmeyen bir değeri var mı? Veya belirli bir duruma ulaştığında uygulamamı incelemek istiyor musunuz? | Koşullu mantık kullanarak kesme noktasının nerede ve ne zaman etkinleştirileceğini denetlemek için koşullu kesme noktasını deneyin. Koşulları eklemek için kesme noktasına sağ tıklayın. Değişken beklenmeyen değere eşit olduğunda koşulu true olarak ayarlayın. Daha fazla bilgi için bkz. Kesme noktası koşulları. |
Kodumu değiştirmeden veya durdurmadan yapılandırılabilir koşullar altında Çıktı penceresinde bilgileri nasıl günlüğe kaydederim? | İzleme noktaları, kodunuzu değiştirmeden veya durdurmadan yapılandırılabilir koşullar altında çıktı penceresinde bilgileri günlüğe kaydetmenize olanak sağlar. Daha fazla bilgi için bkz. Visual Studio hata ayıklayıcısıizleme noktalarını kullanma. |
Değişkenimin değerinin ne zaman değiştiğini nasıl anlarım? | C++ için veri kesme noktasıayarlayın. .NET Core 3 ve üzerini kullanan uygulamalar için veri kesme noktası da ayarlayabilirsiniz. Aksi takdirde, yalnızca C# ve F# için, üzerinde koşullu bir kesme noktası kullanarak bir nesne kimliğiniizleyebilirsiniz. |
Başka bir kesme noktası tetiklenirse yürütmeyi nasıl durdurabilirim? | Yalnızca başka bir kesme noktasına ilk isabet edildiğinde yürütmeyi kesen bir Bağımlı Kesme Noktası ayarlayın. Daha fazla bilgi için bkz. Bağımlı kesme noktası. |
Kesme noktasına yalnızca bir kez vurabilir miyim? | Kodu yalnızca bir kez kesmenizi sağlayan geçici bir kesme noktası ayarlayın. Daha fazla bilgi için bkz. Geçici Kesme Noktası . |
Kodu belirli bir yinelemede döngü içinde duraklatabilir miyim? | Yalnızca başka bir kesme noktasına ilk isabet edildiğinde yürütmeyi kesen bir Bağımlı kesme noktası ayarlayın. Daha fazla bilgi için "İsabet sayısı" başlıklı bölümüne bakınız. |
İşlev adını bildiğim halde konumunu bilmezken kodu işlevin başında duraklatabilir miyim? | Bunu bir fonksiyon kesme noktasıyla yapabilirsiniz. Daha fazla bilgi için bkz. İşlev kesme noktalarını ayarlama. |
Kodu aynı ada sahip birden çok işlevin başında duraklatabilir miyim? | Aynı ada sahip birden çok işleviniz olduğunda (farklı projelerde aşırı yüklenmiş işlevler veya işlevler), işlev kesme noktasıkullanabilirsiniz. |
Kesme noktası eylemleri ve izleme noktaları
izleme noktası, bir iletiyi Çıktı penceresine yazdıran bir kesme noktasıdır. İzleme noktası, programlama dilinde geçici bir izleme deyimi gibi davranabilir ve kodun yürütülmesini duraklatmaz. Kesme Noktası Ayarları penceresinde özel bir eylem ayarlayarak bir izleme noktası oluşturursunuz. Ayrıntılı yönergeler için bkz. Visual Studio hata ayıklayıcısıizleme noktalarını kullanma.
Kesme noktası koşulları
Koşulları ayarlayarak kesme noktasının ne zaman ve nerede çalıştırılacağını kontrol edebilirsiniz. Koşul, hata ayıklayıcının tanıdığı herhangi bir geçerli ifade olabilir. (Geçerli ifadeler hakkında daha fazla bilgi için bkz. hata ayıklayıcıdaİfadeleri.)
Kesme noktası koşulu ayarlamak için:
Kesme noktası simgesine sağ tıklayın ve Koşullar öğesini seçin (veya Alt + F9, Ctuşlarına basın). Fareyle kesme noktası simgesinin üzerine gelin, Ayarlar simgesini seçin ve sonra Kesme Noktası Ayarları penceresinde Koşullar seçeneklerini seçin.
Ayrıca, bir kod satırının yanındaki en sol kenar boşluğuna sağ tıklayıp bağlam menüsünden Koşullu Kesme Noktası Ekle seçerek yeni bir koşullu kesme noktası ayarlayabilirsiniz.
Kesme Noktaları penceresinde bir kesme noktasına sağ tıklayıp ayarlar ve ardından Koşullar'ni seçerek de koşullar ayarlayabilirsiniz.
Breakpoint ayarları
Breakpoint ayarları
Açılan listede Koşullu İfade, İsabet Sayısıveya Filtreseçeneklerinden birini seçin ve değeri buna göre ayarlayın.
Kapat seçin veya Ctrl+Enter tuşlarına basarak Kesme Noktası Ayarları penceresini kapatın. İsterseniz, Kesme Noktaları penceresinden iletişim kutusunu kapatmak için Tamam seçin.
Koşulların ayarlandığı kesme noktaları kaynak kodda + simgesi ve Kesme Noktaları penceresinde simgesi ile gösterilir.
Koşullu ifade oluşturma
koşullu ifade seçtiğinizde iki koşul arasından seçim yapabilirsiniz: doğru veya değiştirildiğinde. Doğru seçeneğini seçerek ifade karşılandığında durdurun veya ifadenin değeri değiştiğinde durdurmak için Değiştiğinde seçeneğini kullanın.
Aşağıdaki örnekte, kesme noktasına sadece testInt
değeri 4olduğunda ulaşılır:
Kesme noktası koşulu doğru
Kesme noktası koşulu doğru
Aşağıdaki örnekte kesme noktasına yalnızca testInt
değeri değiştiğinde isabet edilir:
Geçersiz söz dizimi olan bir kesme noktası koşulu ayarlarsanız, bir uyarı iletisi görüntülenir. Geçerli söz dizimi olan ancak geçersiz semantik içeren bir kesme noktası koşulu belirtirseniz, kesme noktasına ilk kez basılışında bir uyarı iletisi görüntülenir. Her iki durumda da hata ayıklayıcı geçersiz kesme noktasına ulaştığında durur. Kesme noktası yalnızca koşul geçerliyse atlanır ve false
olarak değerlendirilir.
Not
değişikliği yapıldığında alanı için, hata ayıklayıcı koşulun ilk değerlendirmesini bir değişiklik olarak görmez, bu nedenle ilk değerlendirmede kesme noktasına ulaşmaz.
Koşullu ifadelerde Nesne Kimliklerini kullanma (yalnızca C# ve F#
Belirli bir nesnenin davranışını gözlemlemek istediğiniz zamanlar vardır. Örneğin, bir nesnenin neden bir koleksiyona birden çok kez eklendiğini öğrenmek isteyebilirsiniz. C# ve F# dilinde, başvuru türlerinin belirli örnekleri için nesne kimlikleri oluşturabilir ve bunları 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.
Nesne Kimliği oluşturmak için:
Nesne oluşturulduktan sonra kodda bir kesme noktası ayarlayın.
Hata ayıklamayı başlatın ve yürütme kesme noktasında duraklatıldığında, Debug>Windows>Yereller seçin (veya Ctrl + Alt + V, Ltuşlarına basarak Yereller penceresini açın).
Locals penceresinde belirli bir nesne örneğini bulun, sağ tıklayın ve nesne kimliğini yapseçin.
$ penceresinde bir artı bir sayı görmelisiniz. Bu nesne kimliğidir.
Araştırmak istediğiniz noktaya yeni bir kesme noktası ekleyin; örneğin, nesne koleksiyona eklendiğinde. Kesme noktasına sağ tıklayın ve koşulları seçin.
Koşullu İfade alanındaki Nesne Kimliğini kullanın. Örneğin,
item
değişkeni koleksiyona eklenecek olan nesne ise 'Doğru''yi seçin ve öğesi == $<n>yazın; burada <n> nesnenin kimlik numarasıdır.Yürütme, söz konusu nesnenin koleksiyona ekleneceği noktada duracaktır.
Nesne Kimliğini silmek için, Locals penceresinde değişkeni sağ tıklatın ve Nesne Kimliğini Sil'iseçin.
Not
Nesne kimlikleri zayıf başvurular oluşturur ve nesnenin çöp toplanmasını önlemez. Bunlar yalnızca geçerli hata ayıklama oturumu için geçerlidir.
İsabet sayısı koşulu ayarla
Kodunuzdaki bir döngünün belirli sayıda yinelemeden sonra yanlış davranmaya başladığından şüpheleniyorsanız, bu yinelemeye ulaşmak için F5 tekrar tekrar basmak zorunda kalmadan, bu sayıda isabetten sonra yürütmeyi durdurmak için bir kesme noktası ayarlayabilirsiniz.
Kesme Noktası Ayarları penceresindeki Koşullar altında, İsabet Sayısıöğesini seçin ve yineleme sayısını belirtin. Aşağıdaki örnekte kesme noktası, diğer tüm yinelemelere isabet etmek üzere ayarlanmıştır:
Filtre koşulu ayarlama
Kesme noktasını yalnızca belirtilen cihazlarda veya belirtilen işlemlerde ve iş parçacıklarında tetiklenebilecek şekilde kısıtlayabilirsiniz.
Kesme Noktası Ayarları penceresinde Koşullar altında, Filtre'i seçin ve aşağıdaki ifadelerden birini veya daha fazlasını girin:
- MakineAdı = "name"
- ProcessId = değer
- SüreçAdı = "name"
- ThreadId = değer
- ThreadName = "isim"
Dize değerlerini çift tırnak içine alın. Yan tümceleri &
(AND), ||
(OR), !
(DEĞİl) ve parantezler kullanarak birleştirebilirsiniz.
İşlev kesme noktalarını ayarlama
bir işlev çağrıldığında yürütmeyi kesebilirsiniz. Bu, örneğin işlev adını bildiğiniz ancak konumunu bilmediğiniz durumlarda kullanışlıdır. Aynı ada sahip işlevleriniz varsa ve bunların tümünü (farklı projelerdeki aşırı yüklenmiş işlevler veya işlevler gibi) kesmek istiyorsanız da kullanışlıdır.
İşlev kesme noktası ayarlamak için:
Hata Ayıklama>Yeni Kesme Noktası>İşlev Kesme Noktasıseçin veya Ctrl + K, Btuşlarına basın.
Ayrıca Yeni>İşlev Kesme Noktası seçeneğini Kesme Noktaları penceresinde seçebilirsiniz.
Yeni İşlev Kesme Noktası iletişim kutusunda, İşlev Adı kutusuna işlev adını girin.
İşlev belirtimini daraltmak için:
Tam nitelikli işlev adını kullanın.
Örnek:
Namespace1.ClassX.MethodA()
Aşırı yüklenmiş bir işlevin parametre türlerini ekleyin.
Örnek:
MethodA(int, string)
Modülü belirtmek için '!' simgesini kullanın.
Örnek:
App1.dll!MethodA
Yerel C++ dilinde bağlam işlecini kullanın.
{function, , [module]} [+<line offset from start of method>]
Örnek:
{MethodA, , App1.dll}+2
Dil açılır menüsünde işlevin dilini seçin.
OKseçin.
Bellek adresi kullanarak işlev kesme noktası ayarlama (yalnızca yerel C++)
Bir sınıfın belirli bir örneği tarafından çağrılan bir yöntemde işlev kesme noktası ayarlamak için nesnenin adresini kullanabilirsiniz. Örneğin, my_class
türünde adreslenebilir bir nesne verüldüğünde, örneğin çağırdiği my_method
yönteminde bir işlev kesme noktası ayarlayabilirsiniz.
Sınıfın örneği oluşturulduktan sonra bir kesme noktası ayarlayın.
Örneğin adresini bulun (örneğin,
0xcccccccc
).Hata Ayıklama>Yeni Kesme Noktası>İşlev Kesme Noktasıseçin veya Ctrl + K, Btuşlarına basın.
İşlev Adı kutusuna aşağıdakileri ekleyin ve C++ dili seçin.
((my_class *) 0xcccccccc)->my_method
Veri kesme noktalarını ayarlama (.NET Core 3.x veya .NET 5+)
Belirli bir nesnenin özelliği değiştiğinde veri kesme noktaları yürütmeyi böler.
Veri kesme noktası ayarlamak için:
.NET Core veya .NET 5+ projesinde hata ayıklamayı başlatın ve bir kesme noktasına ulaşılana kadar bekleyin.
otomatik İzlemeveya Yereller penceresinde bir özelliğe sağ tıklayın ve bağlam menüsünden değer değiştiğinde Kesme'yi seçin.
.NET Core ve .NET 5+ için veri kesme noktaları şu işlerde çalışmaz:
- Araç ipucu, Yerel Ayarlar, Otomatikler veya İzleme penceresinde genişletilemeyen özellikler
- Statik değişkenler
- DebuggerTypeProxy Özniteliğine Sahip Sınıflar
- Yapıların içindeki alanlar
Ayarlayabileceğiniz maksimum sayı için bkz. Veri kesme noktası donanım sınırları.
Veri kesme noktalarını ayarlama (yalnızca yerel C++)
Veri kesme noktaları, belirtilen bellek adresinde depolanan bir değer değiştiğinde yürütmeyi böler. Değer okunursa ancak değiştirilmezse yürütme bozulmaz.
Veri kesme noktası ayarlamak için:
C++ projesinde hata ayıklamaya başlayın ve kesme noktasına ulaşılana kadar bekleyin. Hata Ayıklama menüsünde Yeni Kesme Noktası >seçin.
Ayrıca, Kesme Noktaları penceresinde >Veri Kesme Noktası'ü seçebilir veya Otomatik, İzlemeveya Yerel penceresinde bir öğeye sağ tıklayabilir ve bağlam menüsünde Değer değiştiğinde kesme'yi seçebilirsiniz.
Adresi kutusuna, bir bellek adresi veya bellek adresi olarak değerlendirilebilecek bir ifade yazın. Örneğin, değişken
&avar
içeriği değiştiğinde kesmek içinavar
yazın.Bayt Sayısı açılan listesinden, hata ayıklayıcının izlemesini istediğiniz bayt sayısını seçin. Örneğin, 4seçerseniz, hata ayıklama aracı
&avar
'den başlayan dört baytı izler ve bu baytlardan herhangi birinin değeri değişirse çalışmayı durdurur.
Veri kesme noktaları aşağıdaki koşullar altında çalışmaz:
- Hata ayıklaması yapılmayan bir işlem bellek konumuna yazar.
- Bellek konumu iki veya daha fazla işlem arasında paylaşılır.
- Bellek konumu çekirdek içinde güncelleştirilir. Örneğin, bellek 32 bit Windows
ReadFile
işlevine geçirilirse, bellek çekirdek modundan güncelleştirilir, dolayısıyla hata ayıklayıcı güncelleştirmede bozulmaz. - Burada izleme ifadesi 32 bit donanımda 4 bayttan büyük ve 64 bit donanımda 8 bayttır. Bu, x86 mimarisinin bir sınırlamasıdır.
Not
Veri kesme noktaları belirli bellek adreslerine bağlıdır. Bir hata ayıklama oturumundan bir sonrakine değişken adresi değişir, bu nedenle veri kesme noktaları her hata ayıklama oturumunun sonunda otomatik olarak devre dışı bırakılır.
Yerel değişkende bir veri kesme noktası ayarlarsanız, işlev sona erdiğinde kesme noktası etkin kalır, ancak bellek adresi artık geçerli olmadığından kesme noktasının davranışı tahmin edilemez. Yerel değişkende bir veri kesme noktası ayarlarsanız, işlev sona ermeden önce kesme noktasını silmeniz veya devre dışı bırakmanız gerekir.
Veri kesme noktası donanım sınırları
Veri kesme noktaları ayarlanırken Windows çekirdeği ve temel donanım aşağıdaki sınırlara sahiptir. Sınır, ayarlayabileceğiniz en fazla veri kesme noktası sayısını ifade eder.
İşlemci mimarisi | Veri kesme noktası sınırı |
---|---|
x64 ve x86 | 4 |
ARM64 | 2 |
KOL | 1 |
Bağımlı kesme noktası ayarlama
Bağımlı kesme noktaları, ancak önce başka bir kesme noktasına isabet edildiğinde yürütmeyi durdurur. Bu nedenle, çok iş parçacıklı bir uygulamada hata ayıklama gibi karmaşık bir senaryoda, başka bir kesme noktasına ilk kez isabet edildikten sonra ek kesme noktalarını yapılandırabilirsiniz. Bu, oyun döngüsü veya yardımcı program API'si gibi ortak yollardaki kodun hata ayıklamasını çok daha kolay hale getirebilir çünkü bu işlevlerdeki bir kesme noktası, yalnızca işlevin uygulamanızın belirli bir bölümünden çağrılırsa etkinleştirilecek şekilde yapılandırılabilir.
Bağımlı kesme noktası ayarlamak için:
Kesme noktası simgesinin üzerine gelin, Ayarlar simgesini seçin ve Kesme Noktası Ayarları penceresinde yalnızca aşağıdaki kesme noktasına basıldığında etkinleştir'i seçin.
Açılır listeden, mevcut kesme noktanızın bağımlı olmasını istediğiniz önkoşul kesme noktasını seçin.
Kesme Noktası Ayarları penceresini kapatmak için Kapat seçin veya Ctrl+Enter basın. İsterseniz Kesme Noktaları penceresinden Tamam'ı seçerek iletişim kutusunu kapatabilirsiniz.
Bağımlı kesme noktasını ayarlamak için sağ tıklama bağlam menüsünü de kullanabilirsiniz.
Bir kod satırının yanındaki en sol kenar boşluğuna sağ tıklayın ve bağlam menüsünden Bağımlı Kesme Noktası Ekle seçin.
- Uygulamanızda yalnızca tek bir kesme noktası varsa bağımlı kesme noktaları çalışmaz.
- Önkoşul kesme noktası silinirse bağımlı kesme noktaları normal satır kesme noktasına dönüştürülür.
Geçici kesme noktası ayarlama
Bu kesme noktası kodu yalnızca bir kez kesmenize olanak tanır. Hata ayıklama sırasında, Visual Studio hata ayıklayıcısı bu kesme noktası için çalışan uygulamayı yalnızca bir kez duraklatır ve ardından vurulduktan hemen sonra kaldırır.
Geçici kesme noktası ayarlamak için:
Kesme noktası simgesinin üzerine gelin, ayarlar simgesini seçin ve kesme noktası ayarları penceresinde bir kez Kesme noktasını kaldır'ı seçin.
Kesme Noktası Ayarları penceresini kapatmak için Kapat seçin veya Ctrl+Enter basın. İsterseniz Kesme Noktaları penceresinden Tamam'ı seçerek iletişim kutusunu kapatabilirsiniz.
Geçici kesme noktasını ayarlamak için sağ tıklama bağlam menüsünü de kullanabilirsiniz.
Bir kod satırının yanındaki en sol kenar boşluğuna sağ tıklayın ve bağlam menüsünden Geçici Kesme Noktası Ekle seçin.
TemporaryBreakpointContext
TemporaryBreakpointContextGeçici kesme noktası bağlamı
Alternatif olarak, F9 + Shift + Alt, T kısayolunu kullanabilir ve geçici kesme noktasını istediğiniz satıra ayarlayabilirsiniz.