Paralel Tanılama Araçları (Eşzamanlılık Çalışma Zamanı)

Visual Studio, çok iş parçacıklı uygulamalarda hata ayıklama ve profil oluşturma için kapsamlı destek sağlar.

Hata ayıklama

Visual Studio hata ayıklayıcısı Paralel Yığınlar penceresini, Paralel Görevler penceresini ve Paralel İzleme penceresini içerir. Daha fazla bilgi için bkz . İzlenecek Yol: Paralel Uygulamada Hata Ayıklama ve Nasıl Yapılır: Paralel İzleme Penceresini Kullanma.

Profil Oluşturma

Profil oluşturma araçları, çok iş parçacıklı bir uygulamanın kendisiyle ve diğer programlarla nasıl etkileşime geçtiğini gösteren grafik, tablosal ve sayısal bilgiler görüntüleyen üç veri görünümü sağlar. Görünümler, önemli alanları hızla tanımlamanızı ve grafik ekranlardaki noktalardan çağrı yığınlarına, çağrı sitelerine ve kaynak koduna gitmenizi sağlar. Daha fazla bilgi için bkz . Eşzamanlılık Görselleştiricisi.

Olay İzleme

Eşzamanlılık Çalışma Zamanı, çeşitli olaylar gerçekleştiğinde profil oluşturucular gibi izleme araçlarını bilgilendirmek için Windows için Olay İzleme 'yi (ETW) kullanır. Bu olaylar bir zamanlayıcı etkinleştirildiğinde veya devre dışı bırakıldığında, bağlam başladığında, sona erdiğinde, bloklarda, engellemelerde veya verimde olduğunda ve paralel algoritmanın ne zaman başladığı veya sona erdiğinde içerir.

Eşzamanlılık Görselleştiricisi gibi araçlar bu işlevselliği kullanır; bu nedenle genellikle bu olaylarla doğrudan çalışmanız gerekmez. Ancak bu olaylar, özel bir profil oluşturucu geliştirirken veya Windows Performans Araç Seti gibi olay izleme araçlarını kullanırken kullanışlıdır.

Eşzamanlılık Çalışma Zamanı bu olayları yalnızca izleme etkinleştirildiğinde tetikler. İzlemeyi devre dışı bırakmak için olay izlemeyi ve concurrency::D isableTracing işlevini etkinleştirmek için concurrency::EnableTracing işlevini çağırın.

Aşağıdaki tabloda, olay izleme etkinleştirildiğinde çalışma zamanının tetiklediği olaylar açıklanmaktadır:

Olay Açıklama Değer
eşzamanlılık::ConcRT_ProviderGuid Eşzamanlılık Çalışma Zamanı için ETW sağlayıcı tanımlayıcısı. f7b697a3-4db5-4d3b-be71-c4d284e6592f
concurrency::ContextEventGuid Bağlamlarla ilgili olayları işaretler. 5727a00f-50be-4519-8256-f7699871fecb
concurrency::P PLParallelForEventGuid Concurrency::p arallel_for algoritmasına yapılan çağrılara girişi ve çıkışı işaretler. 31c8da6b-6165-4042-8b92-949e315f4d84
eşzamanlılık::P PLParallelForeachEventGuid Concurrency::p arallel_for_each algoritmasına yapılan çağrılara girişi ve çıkışı işaretler. 5cb7d785-9d66-465d-bae1-4611061b5434
concurrency::P PLParallelInvokeEventGuid Concurrency::p arallel_invoke algoritmasına yapılan çağrılara girişi ve çıkışı işaretler. d1b5b133-ec3d-49f4-98a3-464d1a9e4682
concurrency::SchedulerEventGuid Görev Zamanlayıcı ile ilgili olayları işaretler. e2091f8a-1e0a-4731-84a2-0dd57c8a5261
concurrency::VirtualProcessorEventGuid Sanal işlemcilerle ilgili olayları işaretler. 2f27805f-1676-4ecc-96fa-7eb09d44302f

Eşzamanlılık Çalışma Zamanı aşağıdaki olayları tanımlar ancak şu anda tetiklemez. Çalışma zamanı bu olayları gelecekte kullanmak üzere ayırır:

concurrency::ConcRT_EventType numaralandırması, bir olayın izlediği olası işlemleri belirtir. Örneğin, algoritmanın girişinde parallel_for çalışma zamanı olayı yükseltir PPLParallelForEventGuid ve işlem olarak sağlar CONCRT_EVENT_START . parallel_for Algoritma dönmeden önce çalışma zamanı olayı yeniden başlatır PPLParallelForEventGuid ve işlem olarak sağlarCONCRT_EVENT_END.

Aşağıdaki örnekte, çağrısı parallel_foriçin izlemeyi etkinleştirme işlemi gösterilmektedir. çalışma zamanı, izleme etkinleştirilmediğinden ilk çağrıyı parallel_for izlemez. çağrısı, EnableTracing çalışma zamanının ikinci çağrıyı izlemesini parallel_forsağlar.

// etw.cpp
// compile with: /EHsc 
#include <ppl.h>

using namespace concurrency;

int wmain()
{
   // Perform some parallel work. 
   // Event tracing is disabled at this point.
   parallel_for(0, 10000, [](int i) {
      // TODO: Perform work.
   });

   // Enable tracing for a second call to parallel_for.
   EnableTracing();
   parallel_for(0, 10000, [](int i) {
      // TODO: Perform work.
   });   
   DisableTracing();
}

Çalışma zamanı ve DisableTracingçağrılarının EnableTracing sayısını izler. Bu nedenle, birden çok kez ararsanız EnableTracing izlemeyi devre dışı bırakmak için aynı sayıda aramanız DisableTracing gerekir.

Ayrıca bkz.

Eşzamanlılık Çalışma Zamanı