Procédure pas à pas : déboguer une application SharePoint à l’aide d’IntelliTrace

En utilisant IntelliTrace, vous pouvez déboguer plus facilement des solutions SharePoint. Les débogueurs traditionnels ne vous donnent qu’un instantané d’une solution au moment présent. Toutefois, vous pouvez utiliser IntelliTrace pour passer en revue les événements passés qui se sont produits dans votre solution et le contexte dans lequel ils se sont produits et accéder au code.

Cette procédure pas à pas montre comment déboguer un projet SharePoint dans Visual Studio à l’aide de Microsoft Monitoring Agent pour collecter des données IntelliTrace à partir d’applications déployées. Pour analyser ces données, vous devez utiliser Visual Studio Enterprise. Ce projet intègre un récepteur de fonctionnalités qui, lorsque la fonctionnalité est activée, ajoute une tâche à la liste des tâches et une annonce à la liste Annonces. Lorsque la fonctionnalité est désactivée, la tâche est marquée comme terminée et une deuxième annonce est ajoutée à la liste Annonces. Toutefois, la procédure contient une erreur logique qui empêche l’exécution correcte du projet. En utilisant IntelliTrace, vous localiserez et corrigerez l'erreur.

S’applique à : les informations contenues dans cette rubrique s’appliquent aux solutions SharePoint créées dans Visual Studio.

Cette procédure pas à pas décrit les tâches suivantes :

Prérequis

Vous devez disposer des éléments suivants pour exécuter cette procédure pas à pas :

  • Éditions de Windows et SharePoint prises en charge.

  • Visual Studio Enterprise.

Créer un récepteur de fonctionnalité

Tout d’abord, vous créez un projet SharePoint vide qui a un récepteur de fonctionnalités.

  1. Créez un projet de solution SharePoint ciblant la version de SharePoint que vous avez installée et nommez-le IntelliTraceTest.

    L’Assistant Personnalisation de SharePoint s’affiche, dans lequel vous pouvez spécifier à la fois le site SharePoint de votre projet et le niveau d’approbation de la solution.

  2. Choisissez le bouton d’option Déployer en tant que solution de batterie, puis cliquez sur le bouton Terminer.

    IntelliTrace fonctionne uniquement sur les solutions de batterie.

  3. Dans l’Explorateur de solutions, ouvrez le menu contextuel du nœud Fonctionnalités, puis choisissez Ajouter une fonctionnalité.

    Feature1.feature s’affiche.

  4. Ouvrez le menu contextuel de Feature1.feature, puis choisissez Ajouter un récepteur d’événements pour ajouter un module de code à la fonctionnalité.

Ajouter du code au récepteur de fonctionnalité

Ensuite, ajoutez du code à deux méthodes dans le récepteur de fonctionnalités : FeatureActivated et FeatureDeactivating. Ces méthodes se déclenchent chaque fois qu’une fonctionnalité est activée ou désactivée dans SharePoint, respectivement.

  1. En haut de la classe Feature1EventReceiver, ajoutez le code suivant, qui déclare des variables qui spécifient le site et le sous-site SharePoint :

    // SharePoint site and subsite.
    private string siteUrl = "http://localhost";
    private string webUrl = "/";
    
  2. Remplacez la méthode FeatureActivated par le code suivant :

    public override void FeatureActivated(SPFeatureReceiverProperties properties)
    {
        try
        {
            using (SPSite site = new SPSite(siteUrl))
            {
                using (SPWeb web = site.OpenWeb(webUrl))
                {
                    // Reference the lists.
                    SPList announcementsList = web.Lists["Announcements"];
                    SPList taskList = web.Lists["Tasks"];
    
                    // Add an announcement to the Announcements list.
                    SPListItem listItem = announcementsList.Items.Add();
                    listItem["Title"] = "Activated Feature: " + properties.Definition.DisplayName;
                    listItem["Body"] = properties.Definition.DisplayName + " was activated on: " + DateTime.Now.ToString();
                    listItem.Update();
    
                    // Add a task to the Task list.
                    SPListItem newTask = taskList.Items.Add();
                    newTask["Title"] = "Deactivate feature: " + properties.Definition.DisplayName;
                    newTask.Update();
                }
            }
        }
    
        catch (Exception e)
        {
            Console.WriteLine("Error: " + e.ToString());
        }
    
    }
    
  3. Remplacez la méthode FeatureDeactivating par le code suivant :

    public override void FeatureDeactivating(SPFeatureReceiverProperties properties)
    {
        // The following line induces an error to demonstrate debugging.
        // Remove this line later for proper operation.
        throw new System.InvalidOperationException("A serious error occurred!");
        try
        {
            using (SPSite site = new SPSite(siteUrl))
            {
                using (SPWeb web = site.OpenWeb(webUrl))
                {
                    // Reference the lists.
                    SPList taskList = web.Lists["Tasks"];
                    SPList announcementsList = web.Lists["Announcements"];
    
                    // Add an announcement that the feature was deactivated.
                    SPListItem listItem = announcementsList.Items.Add();
                    listItem["Title"] = "Deactivated Feature: " + properties.Definition.DisplayName;
                    listItem["Body"] = properties.Definition.DisplayName + " was deactivated on: " + DateTime.Now.ToString();
                    listItem.Update();
    
                    // Find the task that the feature receiver added to the Task list when the
                    // feature was activated.
                    SPQuery qry = new SPQuery();
                    qry.Query = "<Where><Contains><FieldRef Name='Title' /><Value Type='Text'>Deactivate</Value></Contains></Where>";
                    SPListItemCollection taskItems = taskList.GetItems(qry);
    
                    foreach (SPListItem taskItem in taskItems)
                    {
                        // Mark the task as complete.
                        taskItem["PercentComplete"] = 1;
                        taskItem["Status"] = "Completed";
                        taskItem.Update();
                    }
                }
            }
    
        }
    
        catch (Exception e)
        {
            Console.WriteLine("Error: " + e.ToString());
        }
    }
    

Tester le projet

Maintenant que le code est ajouté au récepteur de fonctionnalités et que le collecteur de données est en cours d’exécution, déployez et exécutez la solution SharePoint pour tester si elle fonctionne correctement.

Important

Pour cet exemple, une erreur est générée dans le gestionnaire d’événements FeatureDeactivating. Plus loin dans cette procédure pas à pas, vous localisez cette erreur à l’aide du fichier .iTrace créé par le collecteur de données.

  1. Déployez la solution sur SharePoint, puis ouvrez le site SharePoint dans un navigateur.

    La fonction s'active automatiquement et son récepteur de fonctionnalité ajoute une annonce et une tâche.

  2. Affichez le contenu des listes Annonces et tâches.

    La liste Annonces doit avoir une nouvelle annonce nommée fonctionnalité activée : IntelliTraceTest_Feature1, et la liste Tâches doit avoir une nouvelle tâche nommée Fonctionnalité de désactivation : IntelliTraceTest_Feature1. Si l’un de ces éléments est manquant, vérifiez si la fonctionnalité est activée. Si elle n’est pas activée, activez-la.

  3. Désactivez la fonctionnalité en effectuant les étapes suivantes :

    1. Dans le menu Actions du site dans SharePoint, choisissez Paramètres du site.

    2. Dans Actions du site, choisissez le lien Gérer les fonctionnalités du site.

    3. À côté d’IntelliTraceTest Feature1, choisissez le bouton Désactiver.

    4. Dans la page Avertissement, choisissez le lien Désactiver cette fonctionnalité.

      Le gestionnaire d’événements FeatureDeactivating() génère une erreur.

Collecter des données IntelliTrace à l’aide de Microsoft Monitoring Agent

Si vous installez Microsoft Monitoring Agent sur le système exécutant SharePoint, vous pouvez déboguer des solutions SharePoint à l’aide de données plus spécifiques que les informations génériques retournées par IntelliTrace. L’agent fonctionne en dehors de Visual Studio à l’aide d’applets de commande PowerShell pour capturer des informations de débogage pendant l’exécution de votre solution SharePoint.

Notes

Les informations de configuration de cette section sont spécifiques à cet exemple. Pour plus d’informations sur les autres options de configuration, consultez l’article Utilisation du collecteur autonome IntelliTrace.

  1. Sur l’ordinateur exécutant SharePoint, configurez Microsoft Monitoring Agent et commencez à surveiller votre solution.

  2. Désactivez la fonctionnalité :

    1. Dans le menu Actions du site dans SharePoint, choisissez Paramètres du site.

    2. Dans Actions du site, choisissez le lien Gérer les fonctionnalités du site.

    3. À côté d’IntelliTraceTest Feature1, choisissez le bouton Désactiver.

    4. Dans la page Avertissement, choisissez le lien Désactiver cette fonctionnalité.

      Une erreur se produit (dans ce cas, en raison de l’erreur générée dans le gestionnaire d’événements FeatureDeactivating()).

  3. Dans la fenêtre PowerShell, exécutez la commande Stop-WebApplicationMonitoring pour créer le fichier .iTrace, arrêter la surveillance et redémarrer votre solution SharePoint.

    Stop-WebApplicationMonitoring"<SharePointSite>\<SharePointAppName>"

Déboguer et corriger la solution SharePoint

Vous pouvez maintenant afficher le fichier journal IntelliTrace dans Visual Studio pour rechercher et corriger l’erreur dans la solution SharePoint.

  1. Dans le dossier \IntelliTraceLogs, ouvrez le fichier .iTrace dans Visual Studio.

    La page Résumé IntelliTrace s’affiche. Étant donné que l’erreur n’a pas été traitée, un ID de corrélation SharePoint (un GUID) apparaît dans la zone d’exception non gérée de la section Analyse. Choisissez le bouton Pile des appels si vous souhaitez afficher la pile des appels où l’erreur s’est produite.

  2. Choisissez le bouton Déboguer l’exception.

    Si vous y êtes invité, chargez les fichiers de symboles. Dans la fenêtre IntelliTrace, l’exception est mise en surbrillance sous la forme « Levée : une erreur grave s’est produite ! ».

    Dans la fenêtre IntelliTrace, choisissez l’exception pour afficher le code qui a échoué.

  3. Corrigez l’erreur en ouvrant la solution SharePoint, puis en commentant ou en supprimant l’instruction throw en haut de la procédure FeatureDeactivating().

  4. Régénérez la solution dans Visual Studio, puis redéployez-la dans SharePoint.

  5. Désactivez la fonctionnalité en effectuant les étapes suivantes :

    1. Dans le menu Actions du site dans SharePoint, choisissez Paramètres du site.

    2. Dans Actions du site, choisissez le lien Gérer les fonctionnalités du site.

    3. À côté d’IntelliTraceTest Feature1, choisissez le bouton Désactiver.

    4. Dans la page Avertissement, choisissez le lien Désactiver cette fonctionnalité.

  6. Ouvrez la liste des tâches et vérifiez que la valeur de statut de la tâche de désactivation est « Terminé » et que sa valeur % Terminé est de 100 %.

    Le code s’exécute maintenant correctement.