Dela via


Parallella diagnosverktyg (Samtidigt körmiljö)

Visual Studio har omfattande stöd för felsökning och profilering av program med flera trådar.

Felsökning

Visual Studio-felsökningsprogrammet innehåller fönstret Parallella staplar , fönstret Parallella uppgifter och fönstret Parallell bevakning . Mer information finns i Genomgång: Felsöka ett parallellt program och Så här använder du fönstret Parallell bevakning.

Profilering

Profileringsverktygen innehåller tre datavyer som visar grafisk, tabellbaserad och numerisk information om hur ett program med flera trådar interagerar med sig själv och med andra program. Med vyerna kan du snabbt identifiera problemområden och navigera från punkter i de grafiska visningarna till att se anropsstaplar, samtalsplatser och källkod. Mer information finns i Concurrency Visualizer.

Händelsespårning

Concurrency Runtime använder Händelsespårning för Windows (ETW) för att meddela instrumenteringsverktyg, till exempel profilerare, när olika händelser inträffar. Dessa händelser inkluderar när en schemaläggare aktiveras eller inaktiveras, när en kontext börjar, slutar, blockerar, avblockerar eller ger och när en parallell algoritm börjar eller slutar.

Verktyg som Concurrency Visualizer använder den här funktionen. Därför behöver du vanligtvis inte arbeta med dessa händelser direkt. Dessa händelser är dock användbara när du utvecklar en anpassad profilerare eller när du använder verktyg för händelsespårning, till exempel Windows Performance Toolkit.

Concurrency Runtime genererar endast dessa händelser när spårning är aktiverat. Anropa funktionen concurrency::EnableTracing för att aktivera händelsespårning och funktionen concurrency::D isableTracing för att inaktivera spårning.

I följande tabell beskrivs de händelser som körningen genererar när händelsespårning är aktiverad:

Evenemang Beskrivning Värde
concurrency::ConcRT_ProviderGuid ETW-provideridentifieraren för Concurrency Runtime. f7b697a3-4db5-4d3b-be71-c4d284e6592f
concurrency::ContextEventGuid Markerar händelser som är relaterade till kontexter. 5727a00f-50be-4519-8256-f7699871fecb
concurrency::P PLParallelForEventGuid Markerar början och slut på anrop till algoritmen concurrency::parallel_for. 31c8da6b-6165-4042-8b92-949e315f4d84
concurrency::P PLParallelForeachEventGuid Markerar ingång och utgång till anrop till algoritmen concurrency::p arallel_for_each . 5cb7d785-9d66-465d-bae1-4611061b5434
concurrency::P PLParallelInvokeEventGuid Märker ingångs- och utgångspunkter för anrop till algoritmen concurrency::parallel_invoke. d1b5b133-ec3d-49f4-98a3-464d1a9e4682
concurrency::SchedulerEventGuid Markerar händelser som är relaterade till Aktivitetsschemaläggare. e2091f8a-1e0a-4731-84a2-0dd57c8a5261
concurrency::VirtualProcessorEventGuid Markerar händelser som är relaterade till virtuella processorer. 2f27805f-1676-4ecc-96fa-7eb09d44302f

Concurrency Runtime definierar, men genererar för närvarande inte, följande händelser. Körtiden reserverar dessa händelser för framtida användning.

Konkurrens::ConcRT_EventType uppräkningstyp anger de möjliga åtgärder som en händelse spårar. Vid ingången till algoritmen parallel_for genererar körningen PPLParallelForEventGuid till exempel händelsen och tillhandahåller CONCRT_EVENT_START som åtgärd. Innan parallel_for algoritmen returneras, höjer körtiden återigen PPLParallelForEventGuid händelsen och tillhandahåller CONCRT_EVENT_END som operation.

I följande exempel visas hur du aktiverar spårning för ett anrop till parallel_for. Körtiden spårar inte det första anropet till parallel_for eftersom spårning inte är aktiverad. Anropet till EnableTracing gör att körmiljön kan spåra det andra anropet till parallel_for.

// 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();
}

Körtiden spårar hur många gånger du anropar EnableTracing och DisableTracing. Om du anropar EnableTracing flera gånger måste du därför anropa DisableTracing samma antal gånger för att inaktivera spårning.

Se även

Samtidighetskörning