Compartilhar via


Demonstra Passo a passo: Depurar um aplicativo do SharePoint usando IntelliTrace

Usando o IntelliTrace, você pode depurar mais facilmente a aplicativos, incluindo aquelas que incorporam páginas da web, como as soluções de SharePoint. Depuradores tradicionais oferecem apenas um instantâneo do estado do seu aplicativo no momento atual. No entanto, você pode usar IntelliTrace para revisar e até mesmo navegar até, nos últimos eventos ocorridos em seu aplicativo e o contexto no qual os eventos ocorreram.

Esta explicação passo a passo demonstra como usar o IntelliTrace para depurar um projeto do SharePoint na Visual Studio 2010. Este projeto incorpora um receptor de recurso que, quando o recurso é ativado, adiciona uma tarefa para a lista de tarefas e um anúncio para a lista de avisos. Quando o recurso é desativado, a tarefa está marcada como concluída e um segundo anúncio é adicionado à lista de anúncios. No entanto, o procedimento contém um erro de lógico que impede que o projeto seja executado corretamente. Usando IntelliTrace, você irá localizar e corrigir o erro.

Essa explicação passo a passo ilustra as seguintes tarefas:

  • A criação de um recurso e um receptor de evento do recurso.

  • Respondendo a eventos de recurso usando código.

  • Referenciando as listas de lançamento e a tarefa usando código.

  • Localizando e manipular elementos de lista por meio de código.

  • Usando o IntelliTrace para localizar e corrigir um erro de código.

  • ObservaçãoObservação

    Seu computador pode diferir para as instruções neste tópico em termos de seus nomes ou localizações para alguns elementos da interface do usuário. Esses elementos variam de acordo com suas configurações e sua edição do Visual Studio. Para obter mais informações, consulte Trabalhando com configurações.

Pré-requisitos

Para completar este passo a passo, são necessários os seguintes componentes:

A criação de um receptor de recurso

Primeiro, você deve criar um projeto vazio do SharePoint com um receptor de recurso.

Para criar um receptor de recurso

  1. Iniciar Visual Studio usando o Executar como administrador opção.

  2. No menu File, aponte para New, e em seguida, clique em Project.

    A caixa de diálogo New Project será exibida.

  3. Na parte superior da caixa de diálogo, clique em .NET Framework 3.5 na lista se ela não ainda esteja selecionada.

  4. No idioma que você deseja usar, expanda o SharePoint nó e em seguida, clique na 2010 nó.

  5. No modelos de painel, clique em Projeto vazio do SharePoint, altere o nome do projeto para IntelliTraceTeste em seguida, clique em OK.

    O O Assistente para personalização do SharePoint for exibida, no qual você pode especificar o site do SharePoint para seu projeto e o nível de confiança da solução.

  6. Clique em Deploy como uma solução do farme em seguida, clique em Concluir.

    IntelliTrace só opera em soluções de farm.

  7. Em Solution Explorer, com o botão direito do recursos nó e clique Adicionar recurso.

    Feature1.Feature é exibida.

  8. Feature1.feature com o botão direito e clique em Adicionar receptor de eventos para adicionar um módulo de código para o recurso.

Adicionando código para o receptor do recurso

Em seguida, adicione código para dois métodos no receptor de recurso: FeatureActivated e FeatureDeactivating. Esses métodos disparam sempre que um recurso é ativado ou desativado no SharePoint, respectivamente.

Para adicionar o código para o receptor do recurso

  1. Na parte superior do Feature1.EventReceiver da classe, adicione o seguinte código para declarar variáveis que especificam o site do SharePoint e o subsite:

    ' 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. Substitua o método FeatureActivated pelo seguinte código.

    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. Substitua o método FeatureDeactivating pelo seguinte código.

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

Testar o projeto.

Agora que o código é adicionado para o receptor do recurso, execute o aplicativo do SharePoint para testar se ele funciona corretamente. Neste exemplo, um pequeno erro está incluído no código. Depois que o erro ocorre, você usará IntelliTrace para rastrear o problema.

Para testar o projeto.

  1. Pressione F5 para executar o projeto.

    Após a implantação, o recurso automaticamente ativa, fazendo com que o seu receptor de recurso Adicionar um anúncio e uma tarefa.

  2. Depois que o SharePoint é iniciado, clique em lista no painel de navegação e em seguida, clique duas a lista de anúncios e as tarefas de lista para exibir seu conteúdo.

    Na lista de anúncios, um novo anúncio chamado o recurso de ativado: IntelliTraceTest_Feature1 foi adicionado e uma nova tarefa denominada Desativar recurso: IntelliTraceTest_Feature1 foi adicionado à lista de tarefas. O status da tarefa é "não iniciado".

  3. Desativar o recurso clicando em Gerenciar recursos do site em Ações do Site, clicando em Deactivate ao lado de intellitracetest feature1e, em seguida, clicando no desativar esse recurso link na página de aviso.

    A tarefa Status valor deve agora ser "concluída" e sua % concluída o valor deve ser "100 %". Em vez disso, os valores ainda têm suas configurações padrão. Um erro no código impede que a tarefa seja atualizado.

Depuração do projeto

Use IntelliTrace para localizar e corrigir o problema no código.

Para depurar o projeto

  1. No FeatureDeactivating método, localize o SPQuery qry = new SPQuery(); linha e pressione F9 para inserir um ponto de interrupção de linha.

    Porque o problema ocorre quando o recurso é desativado, esta linha é um local lógico para iniciar a depuração.

  2. Pressione F5 para executar o programa novamente e ative e desative o recurso repetindo as etapas em "Testar o projeto", anteriormente neste tópico.

    Quando o ponto de interrupção é atingido em FeatureActivated, a janela de IntelliTrace é exibida e a lista de todas as etapas que o aplicativo assumiu o caso far.

  3. Pressione F11 para percorrer cada linha de código até que o programa for concluído.

    Sempre que você pressione F11, outra "depurador:" linha é adicionada ao IntelliTrace do aplicativo, depuração de histórico.

  4. Após a conclusão do programa, clique na Break All link na janela IntelliTrace.

    Você deve levar essa etapa para salvar os dados de IntelliTrace.

    Opcionalmente, para exibir informações de chamada para o aplicativo, clique em Gerenciar definições de IntelliSense na barra de ferramentas de IntelliTrace e, em seguida, clique eventos de intellitrace e informações de chamada.

  5. Salvar os dados de depuração clicando em Salvar a sessão atual do IntelliTrace na barra de ferramentas IntelliTrace.

    O arquivo terá uma extensão de .itrace.

  6. Em Visual Studio, clique em Stop Debugging.

  7. Abra o arquivo .itrace.

    Esta etapa abre outra instância do Visual Studio mostrando a página de resumo de IntelliTrace, que fornece informações de depuração, como dados de exceção e uma lista de threads que são usados no programa.

  8. Expanda o A lista de Threads, clique em Principal Threade em seguida, clique em Start Debugging.

    Esta etapa inicia uma sessão de depuração em Visual Studio usando os dados de .itrace. Para exibir detalhes adicionais sobre um evento na janela IntelliTrace, clique nele.

  9. Porque suspeitar de erro ocorre na FeatureDeactivating método, clique o Locals vincular a depurador: etapa para SPListItemCollection taskItems = taskList.GetItems(qry);.

    Será exibida a janela Locals.

  10. Na janela Locals, expanda a lista de variável, localize qry.Querye verificar que a consulta para localizar a tarefa incorretamente procura "Deactive" em vez de "Desativar".

    Esse erro significa que a tarefa nunca é encontrada na consulta da lista de tarefas.

Mantemos o projeto.

Agora que você tenha identificado o problema usando o IntelliTrace, corrija o erro e teste novamente o projeto.

Para testar o projeto.

  1. Feche a sessão de depuração de Visual Studio e reabra o projeto IntelliTraceTest, se ele já não estiver aberto.

  2. Na seqüência de caracteres de consulta do código (qry.Query = "<Where><Contains><FieldRef Name='Title' /><Value Type='Text'>Deactive</Value></Contains></Where>"), altere o valor de Deactive para Deactivate.

  3. Pressione F5 para executar o projeto novamente.

  4. Abra a lista de tarefas e verifique se a tarefa de desativar Status valor agora está corretamente definida para "Concluída" e sua % concluída valor é 100%.

Consulte também

Conceitos

Depuração com IntelliTrace

Outros recursos

Verificando e depurando o código do SharePoint, usando os recursos ALM

Demonstra Passo a passo: Verifique se o código do SharePoint usando testes de unidade