Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Visual Studio biedt uitgebreide ondersteuning voor foutopsporing en profilering van toepassingen met meerdere threads.
Fouten opsporen
Het foutopsporingsprogramma van Visual Studio bevat het venster Parallel Stacks , het venster Parallelle taken en het venster Parallel Watch . Zie Walkthrough: Fouten opsporen in een parallelle toepassing en procedures: Het venster Parallel Watch gebruiken voor meer informatie.
Profileringsproces
De profileringsprogramma's bieden drie gegevensweergaven die grafische, tabellaire en numerieke informatie weergeven over hoe een toepassing met meerdere threads met zichzelf en met andere programma's communiceert. Met de grafische weergaven kunt u snel aandachtspunten identificeren en navigeren van punten op de displays naar call stacks, call sites en broncode. Zie Gelijktijdigheid visualiseren voor meer informatie.
Gebeurtenistracering
De Gelijktijdigheidsruntime maakt gebruik van Event Tracing voor Windows (ETW) om instrumentatiehulpprogramma's, zoals profilers, op de hoogte te stellen wanneer verschillende gebeurtenissen optreden. Deze gebeurtenissen omvatten wanneer een planner wordt geactiveerd of gedeactiveerd, wanneer een context begint, eindigt, blokkeert, deblokkert of opgeeft, en wanneer een parallel algoritme begint of eindigt.
Hulpprogramma's zoals gelijktijdigheid visualiseren maken gebruik van deze functionaliteit; Daarom hoeft u doorgaans niet rechtstreeks met deze gebeurtenissen te werken. Deze gebeurtenissen zijn echter handig wanneer u een aangepaste profiler ontwikkelt of wanneer u hulpprogramma's voor gebeurtenistracering gebruikt, zoals de Windows Performance Toolkit.
De Gelijktijdigheidsruntime genereert deze gebeurtenissen alleen wanneer tracering is ingeschakeld. Roep de concurrency::EnableTracing-functie aan voor het inschakelen van gebeurtenistracering en de concurrency::DisableTracing-functie om tracering uit te schakelen.
In de volgende tabel worden de gebeurtenissen beschreven die de runtime genereert wanneer gebeurtenistracering is ingeschakeld:
| Gebeurtenis | Beschrijving | Waarde |
|---|---|---|
| gelijktijdigheid::ConcRT_ProviderGuid | De ID van de ETW-provider voor de Gelijktijdigheidsruntime. | f7b697a3-4db5-4d3b-be71-c4d284e6592f |
| gelijktijdigheid::ContextEventGuid | Markeert gebeurtenissen die zijn gerelateerd aan contexten. | 5727a00f-50be-4519-8256-f7699871fecb |
| gelijktijdigheid::P PLParallelForEventGuid | Hiermee wordt de ingang en uitgang gemarkeerd voor aanroepen naar het concurrentie::parallel_for algoritme. | 31c8da6b-6165-4042-8b92-949e315f4d84 |
| gelijktijdigheid::PPLParallelForeachEventGuid | Hiermee wordt de ingang en uitgang gemarkeerd voor aanroepen naar het gelijktijdigheidsalgoritme::parallel_for_each algoritme. | 5cb7d785-9d66-465d-bae1-4611061b5434 |
| gelijktijdigheid::PPLParallelInvokeEventGuid | Hiermee worden de toegang tot en uitgang van aanroepen naar het concurrentie::parallel_invoke algoritme gemarkeerd. | d1b5b133-ec3d-49f4-98a3-464d1a9e4682 |
| gelijktijdigheid::SchedulerEventGuid | Markeert gebeurtenissen die zijn gerelateerd aan de Task Scheduler. | e2091f8a-1e0a-4731-84a2-0dd57c8a5261 |
| gelijktijdigheid::VirtualProcessorEventGuid | Markeert gebeurtenissen die zijn gerelateerd aan virtuele processors. | 2f27805f-1676-4ecc-96fa-7eb09d44302f |
De Gelijktijdigheidsruntime definieert, maar genereert momenteel niet de volgende gebeurtenissen. De runtime reserveert deze gebeurtenissen voor toekomstig gebruik:
De concurrency::ConcRT_EventType opsomming specificeert de bewerkingen die mogelijk door een gebeurtenis worden getraceerd. Bijvoorbeeld, aan het begin van het parallel_for algoritme, genereert de runtime de PPLParallelForEventGuid gebeurtenis en dient CONCRT_EVENT_START als de bewerking aan. Voordat het parallel_for algoritme voltooit, genereert de runtime opnieuw de gebeurtenis PPLParallelForEventGuid en wordt CONCRT_EVENT_END als de bewerking geleverd.
In het volgende voorbeeld ziet u hoe u tracering inschakelt voor een aanroep naar parallel_for. De runtime traceert de eerste aanroep parallel_for niet omdat tracering niet is ingeschakeld. De aanroep naar EnableTracing stelt de runtime in staat om de tweede aanroep naar parallel_for te traceren.
// 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();
}
De runtime houdt het aantal keren bij dat u belt EnableTracing en DisableTracing. Als u daarom meerdere keren belt, moet u hetzelfde aantal keren aanroepen EnableTracingDisableTracing om tracering uit te schakelen.