Visionneuse d’événements
Dans le Profileur de performance, vous pouvez recueillir des informations de diagnostic pendant que votre application est en cours d’exécution, puis examiner les informations recueillies après l’arrêt de l’application, comme une analyse post-mortem.
La visionneuse d’événements génériques affiche l’activité de l’application via une liste d’événements tels que la charge de module, le démarrage du thread et la configuration système. Cet affichage vous aide à mieux diagnostiquer le fonctionnement de votre application dans le profileur Visual Studio.
Programme d’installation
Sélectionnez Alt+F2 pour ouvrir le Profileur de performances dans Visual Studio.
Cochez la case Visionneuse d’événements.
Sélectionnez le bouton Démarrer pour exécuter l’outil.
Une fois l’outil en cours d’exécution, parcourez le scénario pour établir un profil dans votre application. Sélectionnez ensuite Arrêter la collection ou fermez votre application pour afficher vos données.
Pour plus d’informations sur la manière de rendre l’outil plus efficace, consultez Optimisation des paramètres de profilage.
Comprendre vos données
Nom de la colonne | Description |
---|---|
Nom du fournisseur | Source de l'événement |
Nom de l'événement | L’événement tel que spécifié par son fournisseur |
Texte | Descriptions du fournisseur, du nom d’événement et de l’ID de l’événement |
Horodatage (ms) | Lorsque l’événement a eu lieu |
GUID du fournisseur | L’ID du fournisseur d’événements |
ID de l’événement | L’ID de l'événement |
ID du processus | Le processus à partir duquel l’événement s’est produit (s’il est connu) |
Nom du processus | Le nom du processus s’il est en cours d’exécution active |
ID du thread | L’ID du thread à partir duquel l’événement s’est produit (s’il est connu) |
Si une colonne est manquante par défaut, faites un clic droit sur l’un des en-têtes de colonne existants et sélectionnez la colonne que vous souhaitez ajouter.
Lorsque vous sélectionnez un événement, la fenêtre Propriétés supplémentaires s’affiche. Les propriétés courantes affichent la liste des propriétés qui apparaîtront pour n’importe quel événement. Les propriétés de charge utile affichent des propriétés spécifiques à l’événement. Pour certains événements, vous pouvez également afficher Piles.
Organiser vos données
Toutes les colonnes à l’exception de la colonne Texte sont triables.
La visionneuse d’événements affiche jusqu’à 20 000 événements à la fois. Pour vous concentrer sur les événements qui vous intéressent, vous pouvez filtrer l’affichage des événements en sélectionnant le filtre d’événements. Vous pouvez également voir quel pourcentage du nombre total d’événements s’est produit pour chaque fournisseur, et ces informations vous permettent de savoir où votre temps est passé. Passez le curseur sur un filtre d’événements unique pour afficher une info-bulle qui affiche les éléments suivants :
- Nom d'événement
- Fournisseur
- GUID
- Pourcentage du total des événements
- Nombre d’événements
Le filtre fournisseur indique le pourcentage du nombre total d’événements survenus pour chaque fournisseur. Passez le curseur sur un seul fournisseur pour afficher une info-bulle similaire avec le nom du fournisseur, le pourcentage du total des événements et le nombre d’événements.
Activer des événements ETW personnalisés
Vous pouvez instrumenter votre code avec des événements ETW personnalisés et les activer pour qu’ils s’affichent dans l’Observateur d’événements. Pour activer les événements personnalisés :
Générez le code d’événement personnalisé.
Un exemple de code d’événement personnalisé C++ est fourni à la fin de cette section.
Ouvrez le Profileur de performances (Alt + F2), activez l’Observateur d’événements, puis sélectionnez l’icône Paramètres (icône d’engrenage) en regard de celle-ci.
Dans la boîte de dialogue, activez la première ligne sous Fournisseurs supplémentaires, puis effectuez l’une des actions suivantes :
Pour le code d’événement personnalisé natif, définissez le GUID du fournisseur en fonction du GUID du code d’événement personnalisé et laissez la valeur Nom du fournisseur vide ou utilisez sa valeur par défaut.
Pour le code d’événement personnalisé C#, définissez la même valeur Nom du fournisseur que celle utilisée lors de la déclaration de votre code d’événement. Ce nom est converti en GUID en arrière-plan. Laissez donc le GUID du fournisseur vide.
Pour un événement personnalisé natif, la ligne doit ressembler à l’illustration suivante.
Cliquez sur OK.
L’événement personnalisé s’affiche dans l’Observateur d’événements lorsque vous collectez une trace de diagnostics et que vous l’ouvrez. L’illustration suivante montre les événements personnalisés dans l’Observateur d’événements avec un filtrage défini pour afficher uniquement l’événement personnalisé.
Voici un exemple de code d’événement personnalisé pour C++.
#include <Windows.h>
#include <evntprov.h>
#include <iostream>
#include <thread>
// This GUID must be regenerated so it is unique for your provider
// {7369B7AC-64EB-4618-B6B6-C8442B12E8F2}
GUID customEventProvider = { 0x7369b7ac, 0x64eb, 0x4618, { 0xb6, 0xb6, 0xc8, 0x44, 0x2b, 0x12, 0xe8, 0xf2 } };
REGHANDLE _customEventProviderRegHandle = 0;
// Id, Version, Channel, Level, OpCode, Task, Keyword
const EVENT_DESCRIPTOR CustomEventDescriptor = { 1, 0, 0, 0, 0, 0, 1 };
int main()
{
// Register the provider
ULONG res = ::EventRegister(&customEventProvider, nullptr, nullptr, &_customEventProviderRegHandle);
if (res != ERROR_SUCCESS)
{
return res;
}
byte data[] = { 0xFF, 0xFF, 0xFF, 0xFF };
EVENT_DATA_DESCRIPTOR eventData[1];
::EventDataDescCreate(&(eventData[0]), &data, sizeof(data));
for (int i = 0; i < 10; ++i)
{
std::this_thread::sleep_for(std::chrono::milliseconds(1000));
::EventWrite(_customEventProviderRegHandle, &CustomEventDescriptor, _countof(eventData), eventData);
std::cout << "Wrote event\n";
}
res = ::EventUnregister(_customEventProviderRegHandle);
if (res != ERROR_SUCCESS)
{
return res;
}
return 0;
}