Partager via


Procédure pas à pas : débogage d'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.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.

  • [!REMARQUE]

    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 Paramètres Visual Studio.

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 la barre de menus, sélectionnez Fichier, Nouveau, Projet.

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

  3. En haut de la boîte de dialogue, choisissez .NET Framework 3.5 dans la liste des versions du .NET Framework.

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

  5. Dans le volet Modèles , choisissez le modèle Projet SharePoint 2010 , remplacez le nom du projet par IntelliTraceTest, puis choisissez le bouton 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. Sélectionnez la case d'option Déployer une solution de batterie , puis choisissez le bouton Terminer .

    IntelliTrace fonctionne uniquement sur les solutions de batterie.

  7. Dans Explorateur de solutions, ouvrez le menu contextuel du nœud fonctionnalités , puis choisissez ajoutez la fonctionnalité.

    Feature1.feature s'affiche.

  8. Ouvrez le menu contextuel Feature1.feature, puis choisissez ajoutez le 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 Feature1EventReceiver, 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. Choisissez la touche 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. Après le démarrage de SharePoint, dans le volet Lancement rapide , cliquez sur le lien listes , puis sélectionnez dans la liste Annonces et la liste des tâches pour afficher leur 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 ouvrant le menu Recherchez les actions , en sélectionnant Recherchez les paramètres, puis choisissez le lien Gérez les fonctionnalités du site sous Recherchez les actions.Choisissez le bouton Mettez off en regard IntelliTraceTest Feature1, puis cliquez sur le lien mettez cette fonctionnalité dans la page d'avertissement.

  4. Dans le volet Lancement rapide , cliquez sur le lien Tâches .

    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 Visual Studio, dans la méthode d' FeatureDeactivating , recherchez la ligne d' SPQuery qry = new SPQuery(); visual C# ou Visual Basic d'entrée ligne d' Dim qry As New SPQuery() .Choisissez la clé 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. Choisissez la touche F5 pour exécuter le programme, et exécutez puis désactivez la fonctionnalité en répétant les étapes dans « pour tester le projet » plus haut dans cette rubrique.

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

  3. Dans le volet IntelliTrace , dans la catégorie événement direct , cliquez sur le lien Variables locales .

  4. Choisissez la clé F11 pour passer à la ligne de code.

    Chaque fois que vous choisissez la clé F11, un autre « débogueur :  » ligne est ajoutée à l'historique de débogage de IntelliTrace de l'application.

  5. Choisissez la clé F11 pour passer à la ligne de code.

  6. Dans le volet Variables locales , développez le nom qry et notez que la valeur Requête s'affiche en rouge.

    Cette distinction indique que la requête pour localiser les recherches de tâche de façon incorrecte pour la mise « off » au lieu de « off ». cette erreur signifie que la tâche n'est jamais recherchée dans la requête de la liste de tâches.

  7. Choisissez la clé F11 pour passer à la ligne de code.

  8. Dans le volet Variables locales , développez le nom taskItems , et notez que la valeur Nombre est zéro (0).

    Cette valeur indique que la collection d' taskItems ne contient aucun élément d' qry .

  9. Choisissez la touche F5 pour continuer le débogage.

  10. Une fois le programme se termine, cliquez sur le lien Interrompre tout dans la fenêtre IntelliTrace.

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

    Vous pouvez afficher les informations d'appel pour l'application par, dans la barre d'outils Intellitrace, choisissant le lien Ouvrir les paramètres IntelliTrace , puis, dans la boîte de dialogue Options , choisissant la case d'option Événements et informations d'appel IntelliTrace .

  11. Dans la barre d'outils IntelliTrace, choisissez le bouton Enregistrer la session IntelliTrace active pour enregistrer les données de débogage.

    Le fichier porte l'extension .iTrace.

  12. Dans la barre de menus d' Visual Studio , choisissez Déboguer, Arrêter le débogage.

  13. Ouvrez le fichier .iTrace.

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

  14. Développez Liste de threads, choisissez Thread principal, puis choisissez le bouton Démarrer le débogage .

    Cette étape démarre une session de débogage dans Visual Studio à l'aide des données .iTrace.Pour afficher d'autres informations sur un événement dans la fenêtre IntelliTrace, choisissez l'événement.

  15. Sélectionnez le lien Variables locales dans l'étape Débogueur : pour SPListItemCollection taskItems = taskList.GetItems(qry);.

    La fenêtre Variables locales s'affiche.

  16. 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 ».

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. Choisissez la touche 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

Vérification et débogage du code SharePoint

Débogage du code plus rapide en examinant son historique avec IntelliTrace

Autres ressources

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