Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Visual Studio fournit une prise en charge étendue pour le débogage et le profilage des applications multithread.
Débogage
Le débogueur Visual Studio inclut la fenêtre Stacks parallèles, la fenêtre Tâches parallèles et la fenêtre Observateur parallèle. Pour plus d’informations, consultez Guide pratique : débogage d’une application parallèle et Guide pratique pour utiliser la fenêtre de surveillance parallèle.
Profilage
Les outils de profilage fournissent trois vues de données qui affichent des informations graphiques, tabulaires et numériques sur la façon dont une application multithread interagit avec elle-même et avec d’autres programmes. Les vues vous permettent d’identifier rapidement les zones à problèmes et de naviguer à partir de points sur les affichages graphiques pour accéder aux piles d’appels, aux sites d’appels et au code source. Pour plus d’informations, consultez Visualiseur concurrentiel.
Suivi de l'événement
Le runtime d’exécution concurrente utilise Event Tracing for Windows (ETW) pour notifier les outils d'instrumentation, tels que les profileurs, lorsque différents événements se produisent. Ces événements incluent lorsqu’un planificateur est activé ou désactivé, lorsqu’un contexte commence, se termine, bloque, débloque ou génère, et lorsqu’un algorithme parallèle commence ou se termine.
Les outils tels que le visualiseur concurrentiel utilisent cette fonctionnalité ; par conséquent, vous n’avez généralement pas besoin d’utiliser ces événements directement. Toutefois, ces événements sont utiles lorsque vous développez un profileur personnalisé ou lorsque vous utilisez des outils de suivi d’événements tels que windows Performance Toolkit.
Le Runtime de Concurrence déclenche ces événements uniquement lorsque le suivi est activé. Appelez la fonction concurrency::EnableTracing pour activer le suivi d’événements et la fonction concurrency::DisableTracing pour désactiver le suivi d’événements.
Le tableau suivant décrit les événements que le runtime déclenche lorsque le suivi des événements est activé :
| Événement | Descriptif | Valeur |
|---|---|---|
| concurrency ::ConcRT_ProviderGuid | Identificateur du fournisseur ETW pour le runtime d’accès concurrentiel. | f7b697a3-4db5-4d3b-be71-c4d284e6592f |
| concurrency ::ContextEventGuid | Marque les événements liés aux contextes. | 5727a00f-50be-4519-8256-f7699871fecb |
| concurrency::PPLParallelForEventGuid | Définit le début et la fin des appels à l'algorithme concurrency::parallel_for. | 31c8da6b-6165-4042-8b92-949e315f4d84 |
| concurrency::PPLParallelForeachEventGuid | Marque l'entrée et la sortie des appels à l'algorithme concurrency::parallel_for_each. | 5cb7d785-9d66-465d-bae1-4611061b5434 |
| concurrency::PPLParallelInvokeEventGuid | Marque l’entrée et la sortie des appels à l’algorithme concurrency::parallel_invoke. | d1b5b133-ec3d-49f4-98a3-464d1a9e4682 |
| concurrency::SchedulerEventGuid | Marque les événements liés au planificateur de tâches. | e2091f8a-1e0a-4731-84a2-0dd57c8a5261 |
| concurrency ::VirtualProcessorEventGuid | Marque les événements liés aux processeurs virtuels. | 2f27805f-1676-4ecc-96fa-7eb09d44302f |
Le Runtime de concurrence définit, mais ne déclenche pas actuellement les événements suivants. L'environnement d'exécution réserve ces événements pour une utilisation ultérieure :
L’énumération concurrency ::ConcRT_EventType spécifie les opérations possibles qu’un événement suit. Par exemple, à l’entrée de l’algorithme parallel_for , le runtime déclenche l’événement PPLParallelForEventGuid et fournit CONCRT_EVENT_START comme opération. Avant que l’algorithme parallel_for ne retourne, le runtime déclenche à nouveau l’événement PPLParallelForEventGuid et fournit CONCRT_EVENT_END comme opération.
L’exemple suivant montre comment activer le suivi pour un appel à parallel_for. Le runtime n’effectue pas le suivi du premier appel à parallel_for parce que la traçabilité n'est pas activée. L'appel à EnableTracing permet au runtime de suivre le deuxième appel à 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();
}
Le runtime effectue le suivi du nombre de fois que vous appelez EnableTracing et DisableTracing. Par conséquent, si vous appelez EnableTracing plusieurs fois, vous devez appeler DisableTracing le même nombre de fois pour désactiver le suivi.