Поделиться через


Пошаговое руководство. Отладка приложения SharePoint при помощи IntelliTrace

С помощью IntelliTrace гораздо легче отлаживать приложения, включая и те, которые содержат веб-страницы, такие как решения SharePoint.Традиционные отладчики показывают только моментальный снимок состояния приложения в текущий момент.Тем не менее IntelliTrace можно использовать для просмотра и перехода к прошедшим событиям приложения, а также контекст, в котором эти события произошли.

В этом пошаговом руководстве показано, как использовать IntelliTrace для отладки проекта SharePoint в Visual Studio.Этот проект содержит приемник компонента, который, когда компонент активен, добавляет задачу в список задач и объявление в список объявлений.Когда компонент отключен, задача помечается как завершенная, а второе объявление добавляется в список объявлений.Тем не менее процедура содержит логическую ошибку, препятствующую правильной работе проекта.С помощью IntelliTrace вы найдете и исправите ошибку.

В данном пошаговом руководстве рассмотрены следующие задачи:

  • создание компонента и приемника событий компонента;

  • реакция на события компонента с помощью кода;

  • создание ссылок на список задач и объявлений с помощью кода;

  • поиск и управление элементами списка с помощью кода;

  • использование IntelliTrace для нахождения и исправления ошибки.

  • ПримечаниеПримечание

    Имена и расположения некоторых элементов пользовательского интерфейса на вашем компьютере могут отличаться от указанных в данной теме.Эти элементы могут отличаться в зависимости от параметров и версии Visual Studio.Дополнительные сведения см. в разделе Параметры Visual Studio.

Обязательные компоненты

Ниже приведены компоненты, необходимые для выполнения данного пошагового руководства.

Создание приемника компонента

Сначала создайте пустой проект SharePoint с приемником компонента.

Создание приемника компонента

  1. Запустите Visual Studio, используя параметр Запуск от имени администратора.

  2. В строке меню выберите Файл, Создать, Проект.

    Откроется диалоговое окно Новый проект.

  3. В верхней части диалогового окна, выберите .NET Framework 3.5 в списке версий платформы .NET Framework.

  4. Ниже язык, который нужно использовать, разверните узел SharePoint, а затем выберите узел 2010.

  5. На панели Шаблоны выберите шаблон Проект SharePoint 2010 измените имя проекта на IntelliTraceTest, а затем нажмите кнопку ОК.

    Появляется Мастер настройки SharePoint, в котором можно указать сайт SharePoint своего проекта и уровень доверия решения.

  6. Выберите переключатель Развернуть как решение фермы, а затем нажмите кнопку Готово.

    IntelliTrace работает только на решениях фермы.

  7. В Обозреватель решений открыть контекстное меню для узла Компоненты, а затем выберите Добавить компонент.

    Появится компонент Feature1.feature.

  8. Открыть контекстное меню с Feature1.feature, а затем выберите Добавить приемник событий чтобы добавить модуль кода функции.

Добавление кода в приемник компонента

Затем добавьте код в два метода приемника компонента: FeatureActivated и FeatureDeactivating.Эти методы активируются каждый раз, когда компонент включается или отключается в SharePoint, соответственно.

Добавление кода в приемник компонента

  1. В верхней части класса Feature1EventReceiver добавьте следующий код для объявления переменных, которые задают сайт и дочерний сайт 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. Замените метод FeatureActivated следующим кодом:

    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. Замените метод FeatureDeactivating следующим кодом:

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

Проверка проекта

Теперь, когда код добавлен код в приемник компонента, запустите приложение SharePoint, чтобы проверить, правильно ли оно работает.В этом примере в коде содержится небольшая ошибка.При возникновении ошибки используйте IntelliTrace для ее отслеживания.

Тестирование проекта

  1. Выберите ключ F5 для запуска проекта.

    При развертывании компонент автоматически активируется, что приводит к добавлению приемником компонента объявления и задачи.

  2. После запуска SharePoint, на панели Быстрый запуск, выберите ссылку Списки, а затем выбрать оба поля и объявления список задач для просмотра их содержимое.

    В список объявлений было добавлено новое объявление с именем Activated feature: IntelliTraceTest_Feature1, а в список задач была добавлена новая задача с именем Deactivate feature: IntelliTraceTest_Feature1.Состояние задачи имеет значение "Не запущено".

  3. Отключите функцию, открыв меню Поместите действия, выбор Параметры сайта, а затем выбрать ссылку Управление функциями сайта в Поместите действия.Нажмите кнопку ОТКЛЮЧИТЬ рядом с IntelliTraceTest Feature1, а затем выберите ссылку Отключите эту функцию в предупреждающей странице.

  4. На панели Быстрый запуск выберите ссылку Задачи.

    Состояние задачи должно иметь значение "Завершено", а значение % завершения должно быть "100%". Вместо этого значения все еще имеют значения по умолчанию.Ошибка в коде препятствует обновлению задачи.

Отладка проекта

Используйте IntelliTrace для поиска и исправления проблемы в коде.

Отладка проекта

  1. В Visual Studio в методе FeatureDeactivating найдите линия SPQuery qry = new SPQuery(); в visual C# или линия Dim qry As New SPQuery() в Visual Basic.Выберите ключ F9, чтобы вставить точку останова на этой линии.

    Поскольку проблема возникает, когда функция деактивирована, логично начать отладку именно с этой строки.

  2. Выберите ключ F5, чтобы запустить программу и активировать снова, а затем выключите функцию, повторите шаги "для тестирования проекта" ранее в этом разделе.

    Когда достигнута точка останова в FeatureDeactivating, появляется окно IntelliTrace с указанием всех шагов, выполненных приложением на данный момент.

  3. На панели IntelliTrace, в категории Интерактивное событие выберите ссылку Локальные.

  4. Выберите ключ F11 для пошагового перемещения в следующей строке кода.

    Каждый раз, когда пользователь выбирает ключ F11, другой "отладчик: " линия добавлена в журнал отладки с помощью IntelliTrace приложения.

  5. Выберите ключ F11 для пошагового перемещения в следующей строке кода.

  6. На панели Локальные разверните имя qry и обратите внимание, что значение Запрос отображается красным цветом.

    Это отличие указывает, что запрос для поиска задача неправильно выполняет поиск "two digit" вместо "отключить". Эта ошибка означает, что задача никогда не найдено в запросе списка задач.

  7. Выберите ключ F11 для пошагового перемещения в следующей строке кода.

  8. На панели Локальные разверните имя taskItems и обратите внимание, что значение Число нулю (0).

    Это значение указывает на то, что коллекция taskItems не содержит элементов qry.

  9. Выберите ключ F5, чтобы продолжить отладку.

  10. После завершения программы, выберите ссылку Прервать все в окне IntelliTrace.

    Необходимо выполнить этот шаг для сохранения данных IntelliTrace.

    Можно просмотреть данные о вызовах для приложения на панели инструментов Intellitrace выбор ссылки Открыть параметры IntelliTrace, затем в диалоговом окне Параметры, при выборе переключателя Сведения о событиях и вызовах IntelliTrace.

  11. На панели инструментов IntelliTrace нажмите кнопку Сохранить текущий сеанс IntelliTrace для сохранения информации отладки.

    Будет сохранен ITRACE-файл.

  12. В строке меню выберите Visual StudioОтладка, Остановить отладку.

  13. Откройте ITRACE-файл.

    Этот шаг открывает страницу сводки IntelliTrace, которая предоставляет данные об отладке, как данные исключения и список потоков, используемых в программе.

  14. Разверните Список потоков выберите Основной поток, а затем нажмите кнопку Начать отладку.

    Этот шаг запускает сеанс отладки в Visual Studio, используя ITRACE-данные.Чтобы просмотреть дополнительные сведения о событии в окне IntelliTrace выберите событие.

  15. Выберите ссылку Локальные в шаге отладчик: для SPListItemCollection taskItems = taskList.GetItems(qry);.

    Появится окно "Локальные".

  16. В окне "Локальные" разверните список переменных, найдите qry.Query и проверьте, что запрос обнаружения задачи ошибочно ищет “Deactive” вместо “Deactivate”.

Повторная проверка проекта

Теперь, когда проблема обнаружена при помощи IntelliTrace, исправьте ошибку, а затем еще раз проверьте проект.

Повторная проверка проекта

  1. Закройте сеанс отладки Visual Studio, а затем снова откройте проект IntelliTraceTest, если он еще не открыт.

  2. В строке кода запроса (qry.Query = "<Where><Contains><FieldRef Name='Title' /><Value Type='Text'>Deactive</Value></Contains></Where>") измените значение с Deactive на Deactivate.

  3. Выберите ключ F5 для запуска проекта.

  4. Откройте список задач и проверьте, что значение Состояние задачи Deactivate равно "Завершено", а значение % завершения равно "100%".

См. также

Основные понятия

Проверка и отладка кода SharePoint

Отладка приложения путем записи выполнения кода с помощью IntelliTrace

Другие ресурсы

Пошаговое руководство. Проверка кода SharePoint при помощи модульных тестов