Freigeben über


Exemplarische Vorgehensweise: Debuggen einer SharePoint-Anwendung mithilfe von IntelliTrace

Mit IntelliTrace können Sie Anwendungen, einschließlich jenen, die Webseiten integrieren (z. B. SharePoint-Lösungen), leichter debuggen.Herkömmliche Debugger erstellen lediglich eine aktuelle Momentaufnahme des Zustands der Anwendung.Sie können mithilfe von IntelliTrace jedoch zu in der Vergangenheit in der Anwendung aufgetretenen Ereignissen sowie zum Kontext, in dem sie aufgetreten sind, navigieren und die Ereignisse überprüfen.

In dieser exemplarischen Vorgehensweise wird veranschaulicht, wie IntelliTrace verwendet wird, um in Visual Studio ein SharePoint-Projekt zu debuggen.Dieses Projekt integriert einen Funktionsempfänger, der bei aktivierter Funktion der Liste "Aufgaben" eine Aufgabe und der Liste "Ankündigungen" eine Ankündigung hinzufügt.Wenn die Funktion deaktiviert wird, wird die Aufgabe als abgeschlossen gekennzeichnet, und der Liste "Ankündigungen" wird eine zweite Ankündigung hinzugefügt.Die Prozedur enthält jedoch einen logischen Fehler, der verhindert, dass das Projekt ordnungsgemäß ausgeführt wird.Mit IntelliTrace können Sie den Fehler suchen und korrigieren.

In dieser exemplarischen Vorgehensweise werden die folgenden Aufgaben veranschaulicht:

  • Erstellen einer Funktion und eines Funktionsereignisempfängers.

  • Reagieren auf Funktionsereignisse mithilfe von Code.

  • Verweisen auf die Listen "Aufgabe" und "Ankündigung" mithilfe von Code.

  • Suchen und Bearbeiten von Listenelementen mithilfe von Code.

  • Verwenden von IntelliTrace, um einen Codefehler zu suchen und zu korrigieren.

  • HinweisHinweis

    Auf Ihrem Computer werden möglicherweise andere Namen oder Speicherorte für einige Benutzeroberflächenelemente angezeigt als die in den folgenden Anweisungen aufgeführten.Diese Elemente ändern sich auf Grundlage der Einstellungen und der Edition von Visual Studio.Weitere Informationen finden Sie unter Visual Studio-Einstellungen.

Vorbereitungsmaßnahmen

Zum Durchführen dieser exemplarischen Vorgehensweise benötigen Sie die folgenden Komponenten:

Erstellen eines Funktionsempfängers

Erstellen Sie zunächst ein leeres SharePoint-Projekt mit einem Funktionsempfänger.

So erstellen Sie einen Funktionsempfänger

  1. Starten Sie Visual Studio mit der Option Als Administrator ausführen.

  2. Wählen Sie in der Menüleiste Datei, Neu, Projekt aus.

    Das Dialogfeld Neues Projekt wird angezeigt.

  3. am oberen Rand des Dialogfelds wählen Sie .NET Framework 3.5 in der Liste der Versionen von .NET Framework aus.

  4. In der Sprache, die Sie verwenden möchten, erweitern Sie den Knoten SharePoint, und wählen Sie dann den Knoten 2010 aus.

  5. Im Bereich Vorlagen die SharePoint 2010-Projekt Vorlage aus, ändern Sie den Projektnamen zu IntelliTraceTest, und wählen Sie dann die Schaltfläche OK aus.

    Der Assistent zum Anpassen von SharePoint wird angezeigt, in dem Sie die SharePoint-Website für Ihr Projekt und die Vertrauensebene der Projektmappe angeben können.

  6. Wählen Sie das Optionsfeld Als Farmlösung bereitstellen, und wählen Sie dann die Schaltfläche Fertig stellen aus.

    IntelliTrace kann nur für Farmlösungen verwendet werden.

  7. In Projektmappen-Explorer öffnen Sie das Kontextmenü für den Knoten Funktionen, und wählen Sie dann Funktion hinzufügen aus.

    "Feature1.feature" wird angezeigt.

  8. Öffnen Sie das Kontextmenü des "Feature1.feature", und wählen Sie dann Ereignisempfänger hinzufügen, um der Funktion ein Codemodul hinzuzufügen.

Hinzufügen von Code zum Funktionsempfänger

Fügen Sie anschließend zwei Methoden im Funktionsempfänger Code hinzu: FeatureActivated und FeatureDeactivating.Diese Methoden lösen immer dann aus, wenn eine Funktion in SharePoint aktiviert bzw. deaktiviert wird.

So fügen Sie dem Funktionsempfänger Code hinzu

  1. Fügen Sie am Anfang der Feature1EventReceiver-Klasse den folgenden Code hinzu, um Variablen zu deklarieren, die die SharePoint-Website und die -Unterwebsite angeben:

    ' 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. Ersetzen Sie die FeatureActivated-Methode durch folgenden Code:

    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. Ersetzen Sie die FeatureDeactivating-Methode durch folgenden Code:

    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());
        }
    }
    

Testen des Projekts

Nachdem dem Funktionsempfänger der Code hinzugefügt wurde, führen Sie die SharePoint-Anwendung aus, um zu testen, ob sie ordnungsgemäß funktioniert.In diesem Beispiel ist ein kleiner Fehler im Code enthalten.Nachdem der Fehler aufgetreten ist, können Sie das Problem mithilfe von IntelliTrace aufspüren.

So testen Sie das Projekt

  1. Wählen Sie die F5-TASTE, um das Projekt auszuführen.

    Nach der Bereitstellung wird die Funktion automatisch aktiviert. Dadurch wird bewirkt, dass der Funktionsempfänger eine Ankündigung und eine Aufgabe hinzufügt.

  2. Nachdem nach, im Bereich Schnellstart, den Listen Link und auswählen, "Ankündigungen" und die Aufgabenliste, um deren Inhalt anzuzeigen wählen Sie.

    In der Liste "Ankündigungen" wurde eine neue Ankündigung mit dem Namen Activated feature: IntelliTraceTest_Feature1 hinzugefügt, und in der Liste "Aufgaben" wurde eine neue Aufgabe mit dem Namen Deactivate feature: IntelliTraceTest_Feature1 hinzugefügt.Der Status der Aufgabe lautet "Nicht gestartet".

  3. Deaktivieren Sie die Funktion, indem Sie das Menü öffnen Websiteaktionen auswählen, Standorteinstellungen, und dann den Websitefeatures verwalten Link mit Websiteaktionen auswählen.Wählen Sie die Schaltfläche Deaktivieren neben IntelliTraceTest Feature1 aus, und wählen Sie dann den Dieses Feature deaktivieren Link auf der Seite "Warnung" aus.

  4. Im Bereich Schnellstart wählen Sie den Aufgaben Link aus.

    Der Wert Status der Aufgabe sollte jetzt "Completed" lauten, und der Wert % Complete sollte "100%" betragen. Stattdessen weisen die Werte immer noch die Standardeinstellungen auf.Ein Fehler im Code verhindert, dass die Aufgabe aktualisiert wird.

Debuggen des Projekts

Verwenden Sie IntelliTrace, um das Problem im Code zu suchen und zu korrigieren.

So debuggen Sie das Projekt

  1. In Visual Studio in der FeatureDeactivating-Methode, suchen Sie die SPQuery qry = new SPQuery(); Zeile in Visual C # oder die Dim qry As New SPQuery() Zeile in Visual Basic.Wählen Sie die F9-Taste, um einen Haltepunkt in dieser Zeile einzufügen.

    Da das Problem auftritt, wenn die Funktion deaktiviert wird, ist diese Zeile ein logischer Ausgangspunkt für das Debuggen.

  2. Wählen Sie die F5-TASTE, um das Programm erneut auszuführen, und aktivieren und deaktivieren Sie dann die Funktion, indem Sie die Schritte in "überprüfen, um das Projekt" weiter oben in diesem Thema zu testen.

    Wenn der Haltepunkt in FeatureDeactivating erreicht ist, wird das IntelliTrace-Fenster angezeigt. Dort werden alle Schritte aufgeführt, die bisher von der Anwendung ausgeführt wurden.

  3. Im Bereich IntelliTrace in der Kategorie Liveereignis, wählen Sie den Lokal Link aus.

  4. Wählen Sie die F11-Taste, um zur nächsten Codezeile fortzufahren.

    Immer wenn Sie die F11-Taste auswählen, ein anderer "Debugger: " Zeile wird dem IntelliTrace-Debugverlauf der Anwendung hinzugefügt, das Verlauf gedebuggt.

  5. Wählen Sie die F11-Taste, um zur nächsten Codezeile fortzufahren.

  6. Im Bereich Lokal erweitern Sie den Abf Namen und beachten Sie, dass der Wert Abfrage rot angezeigt wird.

    Dieser Unterschied gibt an, dass die Abfrage zum Suchen der Aufgabe für "Deactivate" fälschlicherweise nach "Deactive" sucht. Dieser Fehler bedeutet, dass die Aufgabe nie in der Abfrage der Aufgabenliste gefunden wird.

  7. Wählen Sie die F11-Taste, um zur nächsten Codezeile fortzufahren.

  8. Im Bereich Lokal erweitern Sie den taskItems Namen, und beachten Sie, dass der Anzahl-Wert 0 (null) ist.

    Dieser Wert gibt an, dass die Auflistung von taskItems keine qry-Elemente enthält.

  9. Wählen Sie die F5-TASTE, um das Debuggen fortzusetzen.

  10. Nachdem das Programm abgeschlossen ist, wählen Sie den Alle unterbrechen Link im IntelliTrace-Fenster aus.

    Dieser Schritt ist erforderlich, um die IntelliTrace-Daten zu speichern.

    Sie können Aufrufinformationen für die Anwendung durch anzeigen, auf der Intellitrace-Symbolleiste und den IntelliTrace-Einstellungen öffnen Link und dann im Dialogfeld, Optionen auswählen und das Optionsfeld IntelliTrace-Ereignisse und Aufrufinformationen auswählen.

  11. Klicken Sie auf der IntelliTrace-Symbolleiste Aktuelle IntelliTrace-Sitzung speichern verwenden Sie die Schaltfläche, um die Debugdaten zu speichern.

    Die Datei hat die Erweiterung ".iTrace".

  12. Klicken Sie auf der Menüleiste Visual Studio wählen Sie Debuggen, Debuggen beenden aus.

  13. Öffnen Sie die Datei ".iTrace".

    Dieser Schritt öffnet die IntelliTrace- Zusammenfassungsseite, die Debuginformationen wie Ausnahmedaten und eine Liste von Threads bereitstellt, die im Programm verwendet werden.

  14. Erweitern Sie Threadliste, wählen Sie Hauptthread aus und wählen dann die Schaltfläche Debuggen starten aus.

    Dieser Schritt startet eine Debugsitzung in Visual Studio, bei der die .iTrace-Daten verwendet werden.Um weitere Details zu einem Ereignis im IntelliTrace-Fenster anzuzeigen, wählen Sie das - Ereignis.

  15. Wählen Sie den Lokal Link im Debugger: Schritt für SPListItemCollection taskItems = taskList.GetItems(qry); aus.

    Das Fenster "Lokal" wird angezeigt.

  16. Erweitern Sie die variable Liste im Fenster "Lokal", suchen Sie qry.Query, und überprüfen Sie, ob die Abfrage zum Suchen der Aufgabe statt nach "Deactivate" fälschlicherweise nach "Deactive" sucht.

Erneutes Testen des Projekts

Da Sie das Problem mit IntelliTrace identifiziert haben, korrigieren Sie den Fehler, und testen Sie das Projekt erneut.

So testen Sie das Projekt erneut

  1. Schließen Sie die Debugsitzung von Visual Studio, und öffnen Sie dann das IntelliTrace-Testprojekt erneut, falls es nicht bereits geöffnet ist.

  2. Ändern Sie in der Abfragezeichenfolge (qry.Query = "<Where><Contains><FieldRef Name='Title' /><Value Type='Text'>Deactive</Value></Contains></Where>") des Codes den Wert von Deactive in Deactivate.

  3. Wählen Sie die F5-TASTE, um das Projekt erneut auszuführen.

  4. Öffnen Sie die Liste "Aufgaben", und überprüfen Sie, ob der Wert Status der Aufgabe "Deactivate" jetzt ordnungsgemäß auf "Abgeschlossen" gesetzt ist, und der Wert % abgeschlossen jetzt "100%" beträgt.

Siehe auch

Konzepte

Überprüfen und Debuggen von SharePoint-Code

Schnelleres Debuggen von Code durch Überprüfen des Verlaufs mit IntelliTrace

Weitere Ressourcen

Exemplarische Vorgehensweise: Überprüfen von SharePoint-Code mithilfe von Komponententests