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

Usando o IntelliTrace, você pode depurar as soluções do SharePoint com mais facilidade. Os depuradores tradicionais fornecem apenas um instantâneo de uma solução no momento atual. No entanto, você pode usar o IntelliTrace para examinar os eventos anteriores ocorridos em sua solução e o contexto no qual eles ocorreram e navegar até o código.

Este passo a passo demonstra como depurar um projeto do SharePoint no Visual Studio usando o Microsoft Monitoring Agent para coletar dados do IntelliTrace de aplicativos implantados. Para analisar esses dados, você deve usar o Visual Studio Enterprise. Este projeto incorpora um receptor de recursos que, quando o recurso está ativado, adiciona uma tarefa à lista de tarefas e um anúncio à lista de Comunicados. Quando o recurso está desativado, a tarefa é marcada como concluída e um segundo anúncio é adicionado à lista Comunicados. No entanto, o procedimento contém um erro lógico que impede que o projeto seja executado de forma correta. Usando o IntelliTrace, é possível localizar e corrigir o erro.

Aplica-se a: As informações neste tópico se aplicam às soluções do SharePoint que foram criadas no Visual Studio.

Este passo a passo ilustra as seguintes tarefas:

Pré-requisitos

Você precisará dos seguintes componentes para concluir este passo a passo:

  • Edições com suporte do Windows e do SharePoint.

  • Visual Studio Enterprise.

Criar um receptor de recursos

Primeiro, você cria um projeto vazio do SharePoint que tem um receptor de recursos.

  1. Crie um projeto de solução do SharePoint direcionado à versão do SharePoint que você instalou e nomeie-o para IntelliTraceTest.

    O Assistente de Personalização do SharePoint é exibido, onde você pode especificar o site do SharePoint para seu projeto e o nível de confiança da solução.

  2. Clique no botão Implantar como uma solução de farm e clique em Concluir.

    O IntelliTrace opera apenas em soluções de farm.

  3. No Gerenciador de Soluções, abra o menu de atalho do nó Recursos e escolha Adicionar Recurso.

    Feature1.feature é exibido.

  4. Abra o menu de atalho para Feature1.feature e escolha Adicionar Receptor de Eventos para adicionar um módulo de código ao recurso.

Adicionar Código ao Receptor do Recursos

Em seguida, adicione código a dois métodos no receptor de recursos: FeatureActivated e FeatureDeactivating. Esses métodos são disparados sempre que um recurso é ativado ou desativado no SharePoint, respectivamente.

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

    // SharePoint site and subsite.
    private string siteUrl = "http://localhost";
    private string webUrl = "/";
    
  2. Substitua o método FeatureActivated pelo seguinte código:

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

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

Testar o projeto

Agora que o código foi adicionado ao receptor de recursos e o coletor de dados está em execução, implante e execute a solução do SharePoint para testar se ele funciona corretamente.

Importante

Para este exemplo, um erro é gerado no manipulador de eventos FeatureDeactivating. Mais adiante neste passo a passo, você localiza esse erro usando o arquivo .iTrace que o coletor de dados criou.

  1. Implante a solução no SharePoint e abra o site do SharePoint em um navegador.

    O recurso é ativado automaticamente, fazendo com que seu receptor de recursos adicione um anúncio e uma tarefa.

  2. Exiba o conteúdo das listas Comunicados e Tarefas.

    A lista Comunicados deve ter um novo anúncio chamado Recurso Ativado: IntelliTraceTest_Feature1e a lista Tarefas deve ter uma nova tarefa chamada Desativar recurso: IntelliTraceTest_Feature1. Se algum desses itens estiver ausente, verifique se o recurso está ativado. Se não estiver ativado, ative-o.

  3. Desative o recurso executando as seguintes etapas:

    1. No menu Ações do Site no SharePoint, escolha Configurações do Site.

    2. Em Ações do Site, escolha o link Gerenciar recursos do site.

    3. Próximo do IntelliTraceTest Feature1, clique no botão Desativar.

    4. Na página Aviso, escolha o link Desativar esse recurso.

      O manipulador de eventos FeatureDeactivating() lança um erro.

Coletar dados do IntelliTrace usando o Microsoft Monitoring Agent

Se você instalar o Microsoft Monitoring Agent no sistema que está executando o SharePoint, poderá depurar soluções do SharePoint usando dados mais específicos do que as informações genéricas retornadas pelo IntelliTrace. O agente funciona fora do Visual Studio usando cmdlets do PowerShell para capturar informações de depuração enquanto sua solução do SharePoint é executada.

Observação

As informações de configuração nesta seção são específicas para este exemplo. Para mais informações sobre outras opções de configuração, consulte Usando o coletor autônomo do IntelliTrace.

  1. No computador que está executando o SharePoint, configure o Microsoft Monitoring Agent e comece a monitorar sua solução.

  2. Desativar o recurso:

    1. No menu Ações do Site no SharePoint, escolha Configurações do Site.

    2. Em Ações do Site, escolha o link Gerenciar recursos do site.

    3. Próximo do IntelliTraceTest Feature1, clique no botão Desativar.

    4. Na página Aviso, escolha o link Desativar esse recurso.

      Ocorreu um erro (nesse caso, devido ao erro gerado no manipulador de eventos FeatureDeactivating().

  3. Na janela do PowerShell, execute o comando Stop-WebApplicationMonitoring para criar o arquivo .iTrace, interromper o monitoramento e reiniciar sua solução do SharePoint.

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

Depurar e Corrigir a Solução do SharePoint

Agora você pode exibir o arquivo de log do IntelliTrace no Visual Studio para localizar e corrigir o erro na solução do SharePoint.

  1. Na pasta \IntelliTraceLogs, abra o arquivo .iTrace no Visual Studio.

    A página Resumo do IntelliTrace é exibida. Como o erro não foi identificado, uma ID de correlação do SharePoint (um GUID) aparece na área de exceção sem tratamento da seção Análise . Clique no botão Pilha de Chamadas se desejar exibir a pilha de chamadas em que o erro ocorreu.

  2. Clique no botão Depurar Exceção.

    Se solicitado, carregue arquivos de símbolo. Na janela IntelliTrace, a exceção é realçada como "Lançado: erro grave!".

    Na janela IntelliTrace, escolha a exceção para exibir o código que falhou.

  3. Corrija o erro abrindo a solução do SharePoint e depois comentando ou removendo a instrução Lançar na parte superior do procedimento FeatureDeactivating().

  4. Recompile a solução no Visual Studio e, em seguida, reimplante no SharePoint.

  5. Desative o recurso executando as seguintes etapas:

    1. No menu Ações do Site no SharePoint, escolha Configurações do Site.

    2. Em Ações do Site, escolha o link Gerenciar recursos do site.

    3. Próximo do IntelliTraceTest Feature1, clique no botão Desativar.

    4. Na página Aviso, escolha o link Desativar esse recurso.

  6. Abra a lista de tarefas e verifique se o valor Status da tarefa Desativar está "Concluído" e seu valor % Concluído é 100%.

    Agora o código é executado corretamente.