Udostępnij za pośrednictwem


Wskazówki: debugowanie aplikacji SharePoint przy użyciu narzędzia IntelliTrace

Za pomocą IntelliTrace, można łatwo debugować rozwiązania programu SharePoint.Tradycyjne debugery dostarczają tylko migawkę rozwiązania w bieżącym momencie.Jednak można użyć IntelliTrace do przeglądania przeszłych zdarzeń, które wystąpiły w rozwiązaniu, kontekst w którym się pojawiły oraz przejść do kodu.

W tym instruktażu przedstawiono sposób debugowania programu SharePoint 2010 lub SharePoint 2013 projektu programu Visual Studio Ultimate przy użyciu programu Microsoft Agent monitorowania zbieranie danych IntelliTrace z wdrożonej aplikacji.Aby analizować dane, należy użyć programu Visual Studio Ultimate.Ten projekt zawiera odbiorcę funkcji, który w sytuacji, kiedy funkcja jest aktywowana, dodaje zadanie do lity Zadań oraz zawiadomienie do listy Zawiadomień.Gdy funkcja jest dezaktywowana, zadanie zostaje oznaczone jako wykonane, a drugie zawiadomienie jest dodawane do listy Zawiadomień.Jednakże procedura zawiera logiczny błąd, który uniemożliwia poprawne uruchamianie projektu.Za pomocą IntelliTrace, można zlokalizować i poprawić błąd.

Stosuje się do: Informacje zawarte w tym temacie dotyczą rozwiązań SharePoint 2010 i SharePoint 2013, które zostały utworzone w programie Visual Studio.

W przewodniku przedstawiono następujące zagadnienia:

  • Utwórz odbiornik funkcji.

  • Dodaj kod do Odbiorca funkcji.

  • Testowanie projektu.

  • Zbieranie danych IntelliTrace przy użyciu programu Microsoft Agent monitorowania.

  • Program Debug: polecenie i naprawić rozwiązanie programu SharePoint.

[!UWAGA]

Na komputerze w poniższych instrukcjach mogą być wyświetlane inne nazwy i lokalizacje niektórych elementów interfejsu użytkownika programu Visual Studio. Te elementy są określane przez numer wersji Visual Studio oraz twoje ustawienia. Aby uzyskać więcej informacji, zobacz Dostosowywanie ustawień środowiska deweloperskiego w Visual Studio.

Wymagania wstępne

Następujące składniki są wymagane do przeprowadzenia tego instruktażu:

Utwórz odbiorcę funkcji

Najpierw należy utworzyć pusty projekt programu SharePoint, która ma odbiorca funkcji.

Aby utworzyć odbiorcę funkcji

  1. Utwórz projekt rozwiązania SharePoint 2010 lub SharePoint 2013 i nadaj mu nazwę IntelliTraceTest.

    Pojawi się Kreator ustawień niestandardowych SharePoint, w którym będzie można określić witrynę SharePoint dla projektu oraz poziom zaufania rozwiązania.

  2. Wybierz przycisk opcji Wdróż jako rozwiązanie farmy a następnie wybierz przycisk Zakończ.

    IntelliTrace działa jedynie na rozwiązaniach farmy.

  3. W Eksploratorze rozwiązań otwórz menu skrótów dla węzła Funkcje, a następnie wybierz Dodaj funkcję.

    Pojawi się Feature1.feature.

  4. Otwórz menu skrótów dla Feature1.feature, a następnie wybierz Dodaj odbiorcę zdarzenia aby dodać moduł kodu do funkcji.

Dodaj kod do odbiorcy funkcji

Następnie należy dodać kod do dwóch metod w odbiorcy funkcji: FeatureActivated i FeatureDeactivating.Te metody są wyzwalane zawsze, gdy funkcja jest odpowiednio aktywowana lub dezaktywowana w programie SharePoint.

Aby dodać kod do odbiorcy funkcji

  1. W górnej części klasy Feature1EventReceiver dodaj następujący kod, który deklaruje zmienne, które określają witrynę i podwitrynę SharePoint:

    ' SharePoint site and subsite.
    Private siteUrl As String = "https://localhost"
    Private webUrl As String = "/"
    
    // SharePoint site and subsite.
    private string siteUrl = "https://localhost";
    private string webUrl = "/";
    
  2. Zamień metodę FeatureActivated na następujący kod:

    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 an 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 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 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. Zamień metodę FeatureDeactivating na następujący kod:

    Public Overrides Sub FeatureDeactivating(ByVal properties As SPFeatureReceiverProperties)
        ' The following line induces an error to demonstrate debugging.
        ' Remove this line later for proper operation.
        Throw New System.InvalidOperationException("Serious error occurred!")
        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 that 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'>Deactivate</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)
    {
        // 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());
        }
    }
    

Testuj projekt

Teraz kod jest dodany do odbiorcy funkcji a moduł zbierający dane jest uruchomiony, wdróż i uruchom rozwiązanie SharePoint aby przetestować, czy działa poprawnie.

Ważna uwagaWażne

Dla tego przykładu zostanie zgłoszony błąd w obsłudze zdarzeń FeatureDeactivating.W dalszej części tego przewodnika będzie można zlokalizować ten błąd przy użyciu pliku .iTrace, który utworzył moduł zbierający dane.

Aby przetestować projekt

  1. Wdróż rozwiązanie do programu SharePoint, a następnie otwórz witrynę SharePoint w przeglądarce.

    Funkcja automatycznie zostanie aktywowana, sprawiając, że jej odbiorca doda zawiadomienie oraz zadanie.

  2. Wyświetl zawartości list Zawiadomienia oraz Zadania.

    Lista zawiadomień powinna mieć nowe zawiadomienie o nazwie Aktywowana funkcja: IntelliTraceTest_Feature1, a lista zadań powinna mieć nowe zadanie o nazwie Dezaktywuj funkcję: IntelliTraceTest_Feature1.Jeśli brakuje jednego z tych elementów, sprawdź, czy funkcja jest aktywna.Jeśli to nie jest aktywna, należy ją aktywować.

  3. Należy dezaktywować tą funkcję, wykonując następujące czynności:

    1. Z menu w SharePoint Akcje witryny wybierz Ustawienia witryny.

    2. Pod Akcje witryny, wybierz łączę Zarządzaj funkcjami witryny.

    3. Obok IntelliTraceTest Feature1, wybierz przycisk Dezaktywuj.

    4. Na stronie Ostrzeżenie wybierz łączę Dezaktywuj tę funkcję.

    Program obsługi zdarzeń FeatureDeactivating() zgłasza błąd.

Zbieranie danych IntelliTrace przy użyciu programu Microsoft Agent monitorowania

Po zainstalowaniu programu Microsoft Agent monitorowania w systemie, który jest uruchomiony program SharePoint, można debugować rozwiązań programu SharePoint przy użyciu danych, które są bardziej szczegółowe niż informacje ogólne, które zwraca IntelliTrace.Agent działa poza programem Visual Studio przy użyciu poleceń cmdlet środowiska PowerShell do przechwytywania informacji debugowania podczas sekwencji rozwiązanie programu SharePoint.

[!UWAGA]

Informacje o konfiguracji w tej sekcji dotyczą konkretnie tego przykładu.Aby uzyskać więcej informacji dotyczących innych opcji konfiguracji, zobacz Gromadzenie danych diagnostycznych w środowisku produkcyjnym przy użyciu autonomicznego modułu zbierającego dane funkcji IntelliTrace.

  1. Na komputerze, na którym jest uruchomiony program SharePoint skonfigurować program Microsoft Agent monitorowania i rozpocząć monitorowanie rozwiązania.

  2. Dezaktywuj funkcję:

    1. Z menu w SharePoint Akcje witryny wybierz Ustawienia witryny.

    2. Pod Akcje witryny, wybierz łączę Zarządzaj funkcjami witryny.

    3. Obok IntelliTraceTest Feature1, wybierz przycisk Dezaktywuj.

    4. Na stronie Ostrzeżenie wybierz łączę Dezaktywuj tę funkcję.

    Pojawi się błąd (w tym przypadku, ze względu na błąd zgłoszony w obsłudze zdarzeń FeatureDeactivating())

  3. W oknie programu PowerShell, uruchom Stop-WebApplicationMonitoring polecenie, aby utworzyć plik .iTrace, Zatrzymaj monitorowanie i uruchomienie rozwiązania programu SharePoint.

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

Debugowanie i naprawa rozwiązania SharePoint

Teraz możesz wyświetlać plik dziennika IntelliTrace w programie Visual Studio, aby znaleźć i naprawić błąd w roztworze programu SharePoint.

Aby debugować i naprawić rozwiązanie SharePoint

  1. W folderze \IntelliTraceLogs Otwórz plik .iTrace w programie Visual Studio.

    Zostanie wyświetlona strona Podsumowanie IntelliTrace.Ponieważ ten błąd nie był obsłużony, identyfikator korelacji programu SharePoint (GUID) pojawia się w obszarze nieobsługiwanego wyjątku sekcji Analiza.Wybierz przycisk Stos wywołań jeśli chcesz wyświetlić stos wywołań, w którym wystąpił błąd.

  2. Wybierz przycisk Debug wyjątek.

    Jeśli zostanie wyświetlony monit, należy załadować pliki symboli.W oknie IntelliTrace wyjątek jest wyróżniony jako "Zgłoszony: Wystąpił poważny błąd!".

    W oknie IntelliTrace wybierz wyjątek, dla którego ma być wyświetlony kod, który zakończył się niepowodzeniem.

  3. Popraw błąd przez otwarcie rozwiązanie programu SharePoint, a następnie komentowanie lub usunięcie instrukcji throw w górnej części procedury FeatureDeactivating().

  4. Skompiluj ponownie rozwiązanie w programie Visual Studio, a następnie wdróż je ponownie do SharePoint.

  5. Należy dezaktywować tą funkcję, wykonując następujące czynności:

    1. Z menu w SharePoint Akcje witryny wybierz Ustawienia witryny.

    2. Pod Akcje witryny, wybierz łączę Zarządzaj funkcjami witryny.

    3. Obok IntelliTraceTest Feature1, wybierz przycisk Dezaktywuj.

    4. Na stronie Ostrzeżenie wybierz łączę Dezaktywuj tę funkcję.

  6. Otwórz listę zadań i sprawdź, czy stanu wartość zadania Deactivate to "zakończone" i jego Ukończono % wartość wynosi 100%.

    Kod działa teraz poprawnie.

Zobacz też

Koncepcje

Weryfikowanie i debugowanie kodu aplikacji programu SharePoint

Debugowanie aplikacji przez rejestrowanie wykonywania kodu za pomocą funkcji IntelliTrace

Inne zasoby

Instruktaż: Sprawdź kod programu SharePoint za pomocą jednostki badań