Partager via


Procédure pas à pas : Déboguer une application SharePoint avec IntelliTrace

En utilisant IntelliTrace, vous pouvez déboguer plus facilement des applications, notamment celles qui contiennent des pages Web, telles que les solutions SharePoint. Les débogueurs traditionnels fournissent uniquement un instantané de l'état de votre application à un moment précis. Toutefois, vous pouvez utiliser IntelliTrace pour examiner des événements passés qui se sont produits dans votre application et le contexte dans lesquels ils se sont produits. Vous pouvez également accéder à ces événements.

Cette procédure pas à pas explique comment utiliser IntelliTrace pour déboguer un projet SharePoint dans Visual Studio 2010. Ce projet comprend un récepteur de fonctionnalité qui, lorsque la fonctionnalité est activée, ajoute une tâche à la liste 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 le projet de s'exécuter correctement. À l'aide d'IntelliTrace, vous pouvez trouver et corriger l'erreur.

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

  • Création d'une fonctionnalité et d'un récepteur d'événements de fonctionnalité.

  • Réponse aux événements de fonctionnalité à l'aide d'un code.

  • Référence des listes Tâche et Annonce à l'aide d'un code.

  • Recherche et manipulation d'éléments de liste à l'aide d'un code.

  • Utilisation d'IntelliTrace pour trouver et corriger une erreur de code.

  • Notes

    Il est possible que pour certains des éléments de l'interface utilisateur, votre ordinateur affiche des noms ou des emplacements différents de ceux indiqués dans les instructions de cette rubrique. Ces éléments varient en fonction de vos paramètres et de votre édition de Visual Studio. Pour plus d'informations, consultez Utilisation des paramètres.

Composants requis

Pour exécuter cette procédure pas à pas, vous devez disposer des composants suivants :

Création d'un récepteur de fonctionnalité

En premier lieu, créez un projet SharePoint vide avec un récepteur de fonctionnalité.

Pour créer un récepteur de fonctionnalité

  1. Démarrez Visual Studio en sélectionnant l'option Exécuter en tant qu'administrateur.

  2. Dans le menu Fichier, pointez sur Nouveau, puis cliquez sur Projet.

    La boîte de dialogue Nouveau projet s'affiche.

  3. En haut de la boîte de dialogue, cliquez sur .NET Framework 3.5 dans la liste, s'il n'est pas déjà sélectionné.

  4. Sous le langage que vous souhaitez utiliser, développez le nœud SharePoint, puis cliquez sur le nœud 2010.

  5. Dans le volet Modèles, cliquez sur Projet SharePoint vide, remplacez le nom du projet par IntelliTraceTest, puis cliquez sur OK.

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

  6. Cliquez sur Déployer en tant que solution de batterie, puis sur Terminer.

    IntelliTrace fonctionne uniquement sur les solutions de batterie.

  7. Dans l'Explorateur de solutions, cliquez avec le bouton droit sur le nœud Fonctionnalités, puis cliquez sur Ajouter une fonctionnalité.

    Feature1.feature s'affiche.

  8. Cliquez avec le bouton droit sur Feature1.feature, puis cliquez sur Ajouter un récepteur d'événements pour ajouter un module de code à la fonctionnalité.

Ajout d'un code au récepteur de fonctionnalité

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

Pour ajouter un code au récepteur de fonctionnalité

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

    ' SharePoint site/subsite.
    Private siteUrl As String = "https://localhost"
    Private webUrl As String = "/"
    
    // SharePoint site/subsite.
    private string siteUrl = "https://localhost";
    private string webUrl = "/";
    
  2. Remplacez la méthode FeatureActivated par le code suivant :

    Public Overrides Sub FeatureActivated(ByVal properties As SPFeatureReceiverProperties)
        Try
            Using site As New SPSite(siteUrl)
                Using web As SPWeb = site.OpenWeb(webUrl)
                    ' Reference the lists.
                    Dim announcementsList As SPList = web.Lists("Announcements")
                    Dim taskList As SPList = web.Lists("Tasks")
    
                    ' Add a new announcement to the Announcements list.
                    Dim listItem As SPListItem = announcementsList.Items.Add()
                    listItem("Title") = "Activated Feature: " & Convert.ToString(properties.Definition.DisplayName)
                    listItem("Body") = Convert.ToString(properties.Definition.DisplayName) & " was activated on: " & DateTime.Now.ToString()
                    listItem.Update()
    
                    ' Add a to-do task to the Task list.
                    Dim newTask As SPListItem = taskList.Items.Add()
                    newTask("Title") = "Deactivate feature: " & Convert.ToString(properties.Definition.DisplayName)
                    newTask.Update()
                End Using
            End Using
    
        Catch e As Exception
            Console.WriteLine("Error: " & e.ToString())
        End Try
    
    End Sub
    
    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 a new 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 to-do 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 Overrides Sub FeatureDeactivating(ByVal properties As SPFeatureReceiverProperties)
        Try
            Using site As New SPSite(siteUrl)
                Using web As SPWeb = site.OpenWeb(webUrl)
                    ' Reference the lists
                    Dim taskList As SPList = web.Lists("Tasks")
                    Dim announcementsList As SPList = web.Lists("Announcements")
    
                    ' Add an announcement that the feature was deactivated.
                    Dim listItem As SPListItem = announcementsList.Items.Add()
                    listItem("Title") = "Deactivated Feature: " & Convert.ToString(properties.Definition.DisplayName)
                    listItem("Body") = Convert.ToString(properties.Definition.DisplayName) & " was deactivated on: " & DateTime.Now.ToString()
                    listItem.Update()
    
                    ' Find the task the feature receiver added to the Task list when the
                    ' feature was activated.
                    Dim qry As New SPQuery()
                    qry.Query = "<Where><Contains><FieldRef Name='Title' /><Value Type='Text'>Deactive</Value></Contains></Where>"
                    Dim taskItems As SPListItemCollection = taskList.GetItems(qry)
    
                    For Each taskItem As SPListItem In taskItems
                        ' Mark the task as complete.
                        taskItem("PercentComplete") = 1
                        taskItem("Status") = "Completed"
                        taskItem.Update()
                    Next
                End Using
    
            End Using
    
        Catch e As Exception
            Console.WriteLine("Error: " & e.ToString())
        End Try
    
    End Sub
    
    public override void FeatureDeactivating(SPFeatureReceiverProperties properties)
    {
        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 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'>Deactive</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());
        }
    }
    

Test du projet

À présent que le code est ajouté au récepteur de fonctionnalité, exécutez l'application SharePoint pour tester s'il fonctionne correctement. Pour cet exemple, une petite erreur est incluse dans le code. Une fois l'erreur survenue, utilisez IntelliTrace pour localiser le problème.

Pour tester le projet

  1. Appuyez sur F5 pour exécuter le projet.

    Lors du déploiement, la fonctionnalité est automatiquement activée, ce qui entraîne l'ajout d'une annonce et d'une tâche par son récepteur de fonctionnalité.

  2. Une fois que SharePoint est démarré, cliquez sur Listes dans le volet Navigation, puis cliquez à la fois sur la liste Annonces et la liste Tâches pour en consulter le contenu.

    Dans la liste Annonces, une nouvelle annonce nommée Activated feature: IntelliTraceTest_Feature1 a été ajoutée, et une nouvelle tâche nommée Deactivate feature: IntelliTraceTest_Feature1 a été ajoutée à la liste Tâches. L'état de la tâche est « Non démarré ».

  3. Désactivez la fonctionnalité en cliquant sur Gérer les fonctionnalités du site sous Actions du site, en cliquant sur Désactiver en regard de IntelliTraceTest Feature1, puis en cliquant sur le lien Désactiver cette fonctionnalité dans la page Avertissement.

    La valeur État de la tâche devrait maintenant être « Terminé », et sa valeur % achevé devrait être « 100% ». À la place, les valeurs sont encore à leurs paramètres par défaut. Une erreur dans le code empêche la tâche d'être mise à jour.

Débogage du projet

Utilisez IntelliTrace pour trouver et résoudre le problème dans le code.

Pour déboguer le projet

  1. Dans la méthode FeatureDeactivating, trouvez la ligne SPQuery qry = new SPQuery(); et appuyez sur F9 pour insérer un point d'arrêt sur cette ligne.

    Étant donné que le problème se produit lorsque la fonctionnalité est désactivée, cette ligne est un emplacement logique pour démarrer le débogage.

  2. Appuyez sur F5 pour réexécuter le programme, puis activez et désactivez la fonctionnalité en répétant les étapes de la procédure « Pour tester le projet » plus haut dans cette rubrique.

    Lorsque le point d'arrêt est atteint dans FeatureActivated, la fenêtre IntelliTrace s'affiche et répertorie toutes les étapes que l'application a effectué jusqu'à présent.

  3. Appuyez sur F11 pour passer une à une les lignes de code jusqu'à la fin du programme.

    Chaque fois que vous appuyez sur F11, une autre ligne « Debugger: » est ajoutée à l'historique de débogage IntelliTrace de l'application.

  4. Une fois le programme terminé, cliquez sur le lien Interrompre tout dans la fenêtre IntelliTrace.

    Vous devez effectuer cette étape pour enregistrer les données IntelliTrace.

    Pour consulter les informations d'appel pour l'application, vous pouvez également cliquer sur Ouvrir les paramètres IntelliTrace dans la barre d'outils IntelliTrace, puis sur Événements IntelliTrace et informations d'appels.

  5. Enregistrez les données de débogage en cliquant sur Enregistrer la session IntelliTrace active dans la barre d'outils IntelliTrace.

    Le fichier porte l'extension .iTrace.

  6. Dans Visual Studio, cliquez sur Arrêter le débogage.

  7. Ouvrez le fichier .iTrace.

    Cette étape ouvre une autre instance de Visual Studio qui affiche la page Résumé d'IntelliTrace, qui fournit des informations de débogage telles que les données d'exception et une liste des threads utilisés dans le programme.

  8. Développez la Liste de threads, cliquez sur Thread principal, puis sur Démarrer le débogage.

    Cette étape démarre une session de débogage dans Visual Studio à l'aide des données .iTrace. Pour consulter des détails supplémentaires relatifs à un événement dans la fenêtre IntelliTrace, cliquez sur l'événement.

  9. Étant donné que nous pensons que l'erreur se produit dans la méthode FeatureDeactivating, cliquez sur le lien Variables locales de l'étape Debugger: pour SPListItemCollection taskItems = taskList.GetItems(qry);.

    La fenêtre Variables locales s'affiche.

  10. Dans la fenêtre Variables locales, développez la liste de variables, trouvez qry.Query et vérifiez que la requête de recherche de la tâche cherche incorrectement « Deactive » plutôt que « Deactivate ».

    Cette erreur signifie que la tâche n'est jamais recherchée dans la requête de la liste Tâches.

Nouveau test du projet

À présent que vous avez identifié le problème à l'aide d'IntelliTrace, corrigez l'erreur, puis testez à nouveau le projet.

Pour tester à nouveau le projet

  1. Fermez la session de débogage de Visual Studio, et puis rouvrez le projet IntelliTraceTest, s'il n'est pas déjà ouvert.

  2. Dans la chaîne de requête du code (qry.Query = "<Where><Contains><FieldRef Name='Title' /><Value Type='Text'>Deactive</Value></Contains></Where>"), modifiez la valeur Deactive en Deactivate.

  3. Appuyez sur F5 pour exécuter de nouveau le projet.

  4. Ouvrez la liste Tâche et vérifiez que la valeur État de la tâche Deactivate est maintenant définie correctement sur « Terminé » et que sa valeur % achevé est 100 %.

Voir aussi

Concepts

Débogage avec IntelliTrace

Autres ressources

Vérification et débogage du code SharePoint à l'aide des fonctions ALM

Procédure pas à pas : Vérifier le code SharePoint à l'aide de tests unitaires