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.
Visual Studio, çok iş parçacıklı uygulamalarda hata ayıklamanıza yardımcı olmak için çeşitli araçlar ve kullanıcı arabirimi öğeleri sağlar. Bu öğreticide iş parçacığı işaretçilerinin, Paralel Yığınlar penceresinin, Paralel İzleme penceresinin, koşullu kesme noktalarının ve filtre kesme noktalarının nasıl kullanılacağı gösterilmektedir. Bu öğreticiyi tamamladığınızda, çok iş parçacıklı uygulamalarda hata ayıklamaya yönelik Visual Studio özellikleri hakkında bilgi edinebilirsiniz.
Senaryo odaklı öğreticiler için aşağıdaki makalelere bakın.
İlk adım, çok iş parçacıklı bir uygulama projesi oluşturmakla başlamaktır.
Çok iş parçacıklı bir uygulama projesi oluştur
Visual Studio'yu açın ve yeni bir proje oluşturun.
Başlangıç penceresi açık değilse Dosya
Başlangıç Penceresi seçin. Başlangıç penceresinde yeni proje oluştur
seçin. Yeni proje oluştur penceresinde, arama kutusuna konsol girin veya yazın. Ardından, Dil listesinden C#, C++ veya Visual Basic'i seçin ve ardından Platform listesinden Windows'u seçin.
Dil ve platform filtrelerini uyguladıktan sonra .NET veya C++ için Konsol Uygulaması şablonunu ve ardından İleri'yi seçin.
Uyarı
Doğru şablonu görmüyorsanız Visual Studio Yükleyicisi'ni açan Araçlar>Araç ve Özellik Al... seçeneğine gidin. .NET masaüstü geliştirme veya C++ ile masaüstü geliştirme iş yükünü ve ardından Değiştir'i seçin.
Yeni projenizi yapılandırın penceresinde, Proje adı kutusuna MyThreadWalkthroughApp yazın veya girin. Ardından , hangi seçenek varsa İleri'yi veya Oluştur'u seçin.
.NET Core veya .NET 5+ projesi için önerilen hedef çerçeveyi veya .NET 8'i ve ardından Oluştur'u seçin.
Yeni bir konsol projesi görünür. Proje oluşturulduktan sonra bir kaynak dosya görüntülenir. Seçtiğiniz dile bağlı olarak, kaynak dosya Program.cs, MyThreadWalkthroughApp.cpp veya Module1.vb olarak adlandırılabilir.
Kaynak dosyada görüntülenen kodu silin ve aşağıdaki güncelleştirilmiş kodla değiştirin. Kod yapılandırmanız için uygun kod parçacığını seçin.
using System; using System.Threading; public class ServerClass { static int count = 0; // The method that will be called when the thread is started. public void InstanceMethod() { Console.WriteLine( "ServerClass.InstanceMethod is running on another thread."); int data = count++; // Pause for a moment to provide a delay to make // threads more apparent. Thread.Sleep(3000); Console.WriteLine( "The instance method called by the worker thread has ended. " + data); } } public class Simple { public static void Main() { for (int i = 0; i < 10; i++) { CreateThreads(); } } public static void CreateThreads() { ServerClass serverObject = new ServerClass(); Thread InstanceCaller = new Thread(new ThreadStart(serverObject.InstanceMethod)); // Start the thread. InstanceCaller.Start(); Console.WriteLine("The Main() thread calls this after " + "starting the new InstanceCaller thread."); } }Dosya menüsünde Tümünü Kaydet'i seçin.
(Yalnızca Visual Basic) Çözüm Gezgini'nde (sağ bölme), proje düğümüne sağ tıklayın ve Özellikler'i seçin. Uygulama sekmesinin altında Başlangıç nesnesiniBasit olarak değiştirin.
Çok iş parçacıklı uygulamada hata ayıklama
Kaynak kod düzenleyicisinde aşağıdaki kod parçacığını arayın:
Bir yeni kesme noktası eklemek için,
Thread.Sleepsol oluğuna veya C++std::this_thread::sleep_fordeyiminin sol oluğuna sol tıklayın.Kenar boşluğunda, kırmızı daire bu konumda bir kesme noktası ayarlandığını belirtir.
Hata Ayıkla menüsünde Hata Ayıklamayı Başlat (F5) öğesini seçin.
Visual Studio çözümü oluşturur, uygulama hata ayıklayıcı ekli olarak çalışmaya başlar ve kesme noktasında durur.
Kaynak kodu düzenleyicisinde kesme noktasını içeren satırı bulun.
Konu işaretleyicisini keşfet
Hata Ayıklama Araç Çubuğu'nda, Kaynakta İş Parçacıklarını Göster düğmesini seçin
.Hata ayıklayıcıyı ilerletmek için F11 tuşuna iki kez basın.
Pencerenin sol tarafındaki oluklara bakın. Bu satırda, iki bükülmüş iş parçacığına benzeyen dikkat edin.Thread MarkerThreadMarker İş parçacığı işaretçisi, bir iş parçacığının bu konumda durdurulduğunu gösterir.
İş parçacığı işaretçisi bir kesme noktası tarafından kısmen gizlenebilir.
İşaretçiyi konu işaretçisinin üzerine getirin. Durdurulan her iş parçacığının adını ve iş parçacığı kimlik numarasını belirten bir DataTip görüntülenir. Bu durumda, adı büyük olasılıkla
<noname>şeklindedir.
Kısayol menüsündeki kullanılabilir seçenekleri görmek için işaretçiyi seçin.
İş parçacığı konumlarını görüntüleme
Paralel Yığınlar penceresinde, İş Parçacıkları görünümü ile (görev tabanlı programlama için) Görevler görünümü arasında geçiş yapabilir ve her iş parçacığı için çağrı yığını bilgilerini görüntüleyebilirsiniz. Bu uygulamada Sohbet Dizileri görünümünü kullanabiliriz.
Paralel Yığınlar penceresini açmak için Hata Ayıklama>Windows>Paralel Yığınlar'ı seçin. Aşağıdakine benzer bir şey görmeniz gerekir. Her iş parçacığının geçerli konumuna, donanımınıza ve programlama dilinize bağlı olarak tam bilgiler farklılık gösterebilir.
Bu örnekte, soldan sağa yönetilen kod için şu bilgileri görüyoruz:
- Geçerli iş parçacığı (sarı ok)
ServerClass.InstanceMethod'ye girdi.ServerClass.InstanceMethodüzerine gelerek bir iş parçacığının kimliğini ve yığın çerçevesini görüntüleyebilirsiniz. - İş parçacığı 31724, iş parçacığı 20272'ye ait bir kilidi bekliyor.
- Ana thread (sol taraf), ayrıntılı olarak görüntüleyebileceğiniz [Harici Kod] üzerinde durdu, bunu yapmak için Harici Kodu Göster seçeneğini seçebilirsiniz.
Bu örnekte, soldan sağa yönetilen kod için şu bilgileri görüyoruz:
- Ana iş parçacığı (sol taraf)
Thread.Startyerinde durduruldu; burada durdurma noktası
işaretçi simgesiyle tanımlanır. - İki iş parçacığı
ServerClass.InstanceMethod'ye girdi, bunlardan biri geçerli iş parçacığıdır (sarı ok), diğeri iseThread.Sleepiçinde durdu. - Yeni bir iş parçacığı (sağda) başlatılıyor ancak
ThreadHelper.ThreadStartnoktasında durduruluyor.
Uyarı
İş Parçacıkları görünümünü kullanma hakkında daha fazla bilgi için bkz. İş Parçacıkları görünümünü kullanarak kilitlenme hatalarını ayıklama.
- Geçerli iş parçacığı (sarı ok)
İş parçacıklarını liste görünümünde görüntülemek için Hata Ayıklama>Windows>İş Parçacıkları'nı seçin.
Bu görünümde, iş parçacığı 20272'nin Main iş parçacığı olduğunu ve şu anda dış kodda( özellikle System.Console.dll) bulunduğunu kolayca görebilirsiniz.
Kısayol menüsündeki kullanılabilir seçenekleri görmek için Paralel Yığınlar veya İş Parçacıkları penceresindeki girdilere sağ tıklayın.
Bu sağ tıklama menülerinden çeşitli eylemler gerçekleştirebilirsiniz. Bu öğreticide, Paralel İzleme penceresinde (sonraki bölümlerde) bu ayrıntıların daha fazlasını keşfedersiniz.
Bir değişkeni izleme
Windows>1'de Hata Ayıkla'ya> tıklayarakParallel Watch> penceresini açın.
Metni gördüğünüz hücreyi
<Add Watch>(veya dördüncü sütundaki boş üst bilgi hücresini) seçin ve girindata.Her iş parçacığı için veri değişkeninin değerleri pencerede görünür.
Metni gördüğünüz hücreyi
<Add Watch>(veya beşinci sütundaki boş üst bilgi hücresini) seçin ve girincount.Her iş parçacığı için değişkenin
countdeğerleri pencerede görünür. Henüz bu kadar bilgi görmüyorsanız, hata ayıklayıcıdaki iş parçacıklarının yürütülmesini ilerletmek için F11'e birkaç kez basmayı deneyin.
Kullanılabilir seçenekleri görmek için penceredeki satırlardan birine sağ tıklayın.
Konuları işaretle ve işaretlerini kaldır
Önemli başlıkları izlemek ve diğerlerini yoksaymak için başlıkları işaretleyebilirsiniz.
Paralel İzleme penceresinde Shift tuşunu basılı tutun ve birden çok satır seçin.
Sağ tıklayın ve Bayrak'ı seçin.
Seçilen tüm iş parçacıkları işaretlenmiştir. Artık yalnızca işaretli konuları gösterecek şekilde filtreleyebilirsiniz.
Paralel İzleme penceresinde, Yalnızca İşaretlenmiş İş Parçacıklarını Göster düğmesini
seçin.Listede yalnızca işaretlenmiş konular görünür.
Tavsiye
Bazı iş parçacıklarına bayrak ekledikten sonra, kod düzenleyicisinde bir kod satırına sağ tıklayabilir ve Bayrak eklenmiş İş Parçacıklarını İmleçte Çalıştır'ı seçebilirsiniz. Tüm işaretli iş parçacıklarının ulaşabileceği kodu seçtiğinizden emin olun. Visual Studio, iş parçacıklarını seçilen kod satırında duraklatarak iş parçacıklarını dondurup çözerek yürütme sırasını denetlemeyi kolaylaştırır.
Show Only Flagged Threads düğmesini yeniden seçerek Show All Threads moduna geri dönün.
Bir veya daha fazla bayrak eklenmiş iş parçacığını kaldırmak için Paralel İzleme penceresinde bu iş parçacıklarından birine sağ tıklayın ve Bayrağı Kaldır seçeneğini seçin.
İş parçacığı yürütülmesini dondurma ve çözme
Tavsiye
İş parçacıklarının çalışma sırasını denetlemek için iş parçacıklarını dondurabilir ve çözebilirsiniz (askıya alıp sürdürebilirsiniz). Bu, kilitlenmeler ve yarış koşulları gibi eşzamanlılık sorunlarını çözmenize yardımcı olabilir.
Paralel İzleme penceresinde, tüm satırlar seçili durumdayken sağ tıklayın ve Dondur'u seçin.
İkinci sütunda, her satır için bir duraklatma simgesi görüntülenir. Duraklatma simgesi, iş parçacığının dondurulduğunu gösterir.
Yalnızca bir satır seçerek diğer tüm satırların seçimini kaldırın.
Bir satıra sağ tıklayın ve Çöz'e tıklayın.
Bu satırdaki duraklatma simgesi kaybolur ve bu da iş parçacığının artık dondurulmadığını gösterir.
Kod düzenleyicisine geçin ve F11 tuşuna basın. Yalnızca dondurulmamış iş parçacığı çalışır.
Uygulama ayrıca bazı yeni iş parçacıklarını da başlatabilir. Yeni iş parçacıklarının hiçbiri iltihapsız ve dondurulmuyor.
Koşullu kesme noktalarıyla tek bir iş parçacığını izleme
Hata ayıklama işleminde tek bir iş parçacığının yürütülmesini izlemek yararlı olabilir. Bunun bir yolu, ilgilenmediğiniz iş parçacıklarını dondurmaktır. Bazı senaryolarda, örneğin belirli bir hatayı yeniden oluşturmak için diğer iş parçacıklarını dondurmadan tek bir iş parçacığını takip etmeniz gerekebilir. Diğer iş parçacıklarını dondurmadan bir iş parçacığını takip etmek için, ilgilendiğiniz iş parçacığı dışında koda girmekten kaçınmanız gerekir. Koşullu kesme noktası ayarlayarak bu görevi gerçekleştirebilirsiniz.
İş parçacığı adı veya iş parçacığı kimliği gibi farklı koşullarda kesme noktaları ayarlayabilirsiniz. Her bir iş parçacığına özgü olduğunu bildiğiniz verilere göre koşulu ayarlamak faydalı olabilir. Hata ayıklama sırasında belirli bir veri değerine, herhangi bir iş parçacığından daha fazla ilgi duyduğunuzda bu yaklaşım yaygındır.
Daha önce oluşturduğunuz kesme noktasına sağ tıklayın ve Koşullar'ı seçin.
Kesme Noktası Ayarları penceresinde koşullu ifade için girin
data == 5.
Tavsiye
Belirli bir iş parçacığıyla daha çok ilgileniyorsanız, koşul için bir iş parçacığı adı veya iş parçacığı kimliği kullanın. Kesme Noktası Ayarları penceresinde bunu yapmak için Koşullu ifade yerine Filtre'yi seçin ve filtre ipuçlarını izleyin. Hata ayıklayıcıyı yeniden başlattığınızda iş parçacığı kimlikleri değiştikçe uygulama kodunuzda iş parçacıklarınızı adlandırmak isteyebilirsiniz.
Kesme Noktası Ayarları penceresini kapatın.
Hata ayıklama oturumunuzu yeniden başlatmak için
düğmesini seçin.Veri değişkeninin değerinin 5 olduğu iş parçacığında koda bölün. Paralel İzleme penceresinde, geçerli hata ayıklayıcısı bağlamını gösteren sarı oku arayın.
Artık kodun üzerinden atlayabilir (F10) ve koda girebilir (F11) ve tek iş parçacığının yürütülmesini izleyebilirsiniz.
Kesme noktası koşulu iş parçacığına özgü olduğu ve hata ayıklayıcının diğer iş parçacıklarındaki diğer kesme noktalarına isabet etmemesi (bunları devre dışı bırakmanız gerekebilir) sürece, diğer iş parçacıklarına geçmeden kodun üzerine geçebilir ve koda adım atabilirsiniz.
Uyarı
Hata ayıklayıcıyı ilerlettiğinızda, tüm iş parçacıkları çalışır. Ancak, hata ayıklayıcısı diğer iş parçacıklarından biri kesme noktasına isabet etmediği sürece diğer iş parçacıklarında koda bölünemez.