Condividi tramite


Procedura dettagliata: debug di un'applicazione di SharePoint tramite IntelliTrace

IntelliTrace consente di eseguire più facilmente il debug delle applicazioni, incluse quelle in cui sono incorporate pagine Web, ad esempio soluzioni SharePoint. I debugger tradizionali offrono solo uno snapshot dello stato corrente dell'applicazione. Tuttavia, è possibile utilizzare IntelliTrace per esaminare, e persino accedervi da altri percorsi, eventi passati che sono stati generati nell'applicazione nonché il contesto in cui gli eventi si sono verificati.

In questa procedura dettagliata viene illustrato come utilizzare IntelliTrace per eseguire il debug di un progetto SharePoint in Visual Studio 2010. In questo progetto è incorporato un ricevitore di funzionalità che, quando la funzionalità è attivata, consente di aggiungere un'attività all'elenco delle attività e un annuncio all'elenco degli annunci. Quando la funzionalità viene disattivata, l'attività viene contrassegnata come completata e all'elenco degli annunci viene aggiunto un secondo annuncio. Tuttavia, nella procedura è contenuto un errore logico che impedisce la corretta esecuzione del progetto. Tramite IntelliTrace, l'errore verrà individuato e corretto.

In questa procedura dettagliata vengono illustrate le attività seguenti:

  • Creazione di una funzionalità e di un ricevitore di eventi di funzionalità.

  • Risposta a eventi di funzionalità tramite codice.

  • Riferimento agli elenchi delle attività e degli annunci tramite codice.

  • Individuazione e modifica di elementi dell'elenco tramite codice.

  • Utilizzo di IntelliTrace per individuare e correggere un errore del codice.

  • Nota

    Gli elementi dell'interfaccia utente descritti nelle istruzioni contenute in questo argomento potrebbero differire, in termini di nomi o percorsi, da quelli del computer in uso. Questi elementi variano in base alle impostazioni e all'edizione di Visual Studio. Per ulteriori informazioni, vedere Gestione delle impostazioni.

Prerequisiti

Per completare la procedura dettagliata, è necessario disporre dei componenti seguenti:

Creazione di un ricevitore di funzionalità

Creare innanzitutto un progetto SharePoint vuoto con un ricevitore di funzionalità.

Per creare un ricevitore di funzionalità

  1. Avviare Visual Studio utilizzando l'opzione Esegui come amministratore.

  2. Scegliere Nuovo dal menu File, quindi Progetto.

    Verrà visualizzata la finestra di dialogo Nuovo progetto.

  3. Nella parte superiore della finestra di dialogo fare clic su .NET Framework 3.5 nell'elenco se tale opzione non è già selezionata.

  4. Sotto il linguaggio che si desidera utilizzare espandere il nodo SharePoint, quindi fare clic sul nodo 2010.

  5. Nel riquadro Modelli fare clic su Progetto SharePoint vuoto, impostare il nome del progetto su IntelliTraceTest, quindi scegliere OK.

    Verrà visualizzata la Personalizzazione guidata SharePoint in cui è possibile specificare sia il sito SharePoint per il progetto sia il livello di attendibilità della soluzione.

  6. Fare clic su Distribuisci come soluzione farm, quindi scegliere Fine.

    IntelliTrace funziona solo in soluzioni farm.

  7. In Esplora soluzioni fare clic con il pulsante destro del mouse sul nodo Funzionalità, quindi scegliere Aggiungi funzionalità.

    Verrà visualizzato Feature1.feature.

  8. Fare clic con il pulsante destro del mouse su Feature1.feature, quindi scegliere Aggiungi ricevitore di eventi per aggiungere un modulo di codice alla funzionalità.

Aggiunta di codice al ricevitore di funzionalità

Successivamente aggiungere codice ai due metodi nel ricevitore di funzionalità FeatureActivated e FeatureDeactivating. Questi metodi vengono attivati ogni volta che una funzionalità viene rispettivamente attivata o disattivata in SharePoint.

Per aggiungere codice al ricevitore di funzionalità

  1. All'inizio della classe Feature1.EventReceiver aggiungere il codice seguente per dichiarare variabili mediante le quali vengono specificati il sito e il sito secondario di 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. Sostituire il metodo FeatureActivated con il codice seguente:

    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. Sostituire il metodo FeatureDeactivating con il codice seguente:

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

Verifica del progetto

Dopo aver aggiunto il codice al ricevitore di funzionalità, eseguire l'applicazione di SharePoint per verificare che funzioni correttamente. Per questo esempio, nel codice è incluso un piccolo errore. Una volta verificatosi l'errore, si utilizzerà IntelliTrace per individuare il problema.

Per verificare il progetto

  1. Premere F5 per eseguire il progetto.

    Durante la distribuzione, la funzionalità viene attivata automaticamente, determinando l'aggiunta di un annuncio e di un'attività da parte del ricevitore di funzionalità.

  2. Dopo l'avvio di SharePoint, fare clic su Elenchi nel riquadro di spostamento, quindi fare clic sia sull'elenco degli annunci sia sull'elenco delle attività per visualizzare il relativo contenuto.

    Nell'elenco degli annunci è stato aggiunto un nuovo annuncio denominato Funzionalità attivata: IntelliTraceTest_Feature1 e nell'elenco delle attività è stata aggiunta una nuova attività denominata Disattiva funzionalità: IntelliTraceTest_Feature1. Lo stato dell'attività è "Non avviata".

  3. Disattivare la funzionalità selezionando Gestisci caratteristiche sito in Azioni sito, scegliendo Disattiva accanto a IntelliTraceTest Feature1, quindi facendo clic sul collegamento Disattiva questa caratteristica nella pagina Avviso.

    Il valore Stato dell'attività dovrebbe ora essere "Completata" e il relativo valore % completata dovrebbe essere "100%", invece i valori sono ancora quelli predefiniti. Un errore nel codice impedisce l'aggiornamento dell'attività.

Debug del progetto

Utilizzare IntelliTrace per individuare e correggere il problema nel codice.

Per eseguire il debug del progetto

  1. Nel metodo FeatureDeactivating individuare la riga SPQuery qry = new SPQuery(); e premere F9 per inserire un punto di interruzione su tale riga.

    Poiché il problema si verifica quando la funzionalità è disattivata, questa riga è il punto più adatto per avviare il debug.

  2. Premere F5 per eseguire di nuovo il programma e attivare e quindi disattivare la funzionalità ripetendo i passaggi indicati nella sezione "Per verificare il progetto" precedentemente in questo argomento.

    Quando viene raggiunto il punto di interruzione in FeatureActivated, viene visualizzata la finestra IntelliTrace e vengono elencati tutti i passaggi eseguiti fino a questo momento dall'applicazione.

  3. Premere F11 per eseguire le istruzioni successive una alla volta fino al completamento del programma.

    Ogni volta che si preme F11, viene aggiunta un'altra riga "Debugger:" alla cronologia di debug di IntelliTrace dell'applicazione.

  4. Dopo aver completato il programma, fare clic sul collegamento Interrompi tutto nella finestra IntelliTrace.

    È necessario effettuare questo passaggio per salvare i dati IntelliTrace.

    Facoltativamente, per visualizzare informazioni sulle chiamate per l'applicazione, fare clic su Apri impostazioni IntelliTrace sulla barra degli strumenti IntelliTrace, quindi fare clic su Eventi IntelliTrace e informazioni sulle chiamate.

  5. Salvare i dati di debug facendo clic su Salva la sessione corrente di IntelliTrace sulla barra degli strumenti IntelliTrace.

    L'estensione del file sarà iTrace.

  6. In Visual Studio fare clic su Termina debug.

  7. Aprire il file con estensione iTrace.

    Questo passaggio consente di aprire un'altra istanza di Visual Studio in cui viene visualizzata la pagina Riepilogo IntelliTrace contenente informazioni sul debug, quali i dati eccezione e un elenco di thread utilizzati nel programma.

  8. Espandere l'Elenco dei thread, fare clic su Thread principale, quindi scegliere Avvia debug.

    Questo passaggio consente di avviare una sessione di debug in Visual Studio utilizzando i dati iTrace. Per visualizzare dettagli aggiuntivi su un evento nella finestra IntelliTrace, fare clic sull'evento interessato.

  9. Poiché si sospetta la presenza dell'errore nel metodo FeatureDeactivating, fare clic sul collegamento Variabili locali nel passaggio Debugger: per SPListItemCollection taskItems = taskList.GetItems(qry);.

    Verrà visualizzata la finestra Variabili locali.

  10. Nella finestra Variabili locali espandere l'elenco di variabili, individuare qry.Query e verificare che tramite la query per individuare l'attività viene cercato erroneamente "Deactive" anziché "Deactivate".

    Questo errore indica che l'attività non verrà mai trovata nella query dell'elenco delle attività.

Nuovo test del progetto

Una volta identificato il problema tramite IntelliTrace, correggere l'errore, quindi eseguire nuovamente il test del progetto.

Per eseguire di nuovo il test del progetto

  1. Chiudere la sessione di debug di Visual Studio, quindi riaprire il progetto IntelliTraceTest se non è già aperto.

  2. Nella stringa di query del codice (qry.Query = "<Where><Contains><FieldRef Name='Title' /><Value Type='Text'>Deactive</Value></Contains></Where>") modificare il valore da Deactive a Deactivate.

  3. Premere F5 per eseguire nuovamente il progetto.

  4. Aprire l'elenco delle attività e verificare che il valore Stato dell'attività Deactivate è ora impostato correttamente su "Completata" e il relativo valore % completata è 100%.

Vedere anche

Concetti

Debug con IntelliTrace

Altre risorse

Verifica e debug del codice di SharePoint tramite funzionalità ALM

Procedura dettagliata: verifica del codice di SharePoint tramite unit test