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.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 Impostazioni di Visual Studio.

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. Sulla barra dei menu, scegliere Il file, Nuova, Project.

    Verrà visualizzata la finestra di dialogo Nuovo progetto.

  3. Nella parte superiore della finestra di dialogo, scegliere .NET Framework 3.5 nell'elenco delle versioni di.NET Framework.

  4. Sotto il linguaggio che si desidera utilizzare, espandere il nodo SharePoint quindi selezionare il nodo 2010.

  5. Nel riquadro Modelli, scegliere il modello Progetto SharePoint 2010, modificare il nome del progetto a IntelliTraceTestquindi scegliere il pulsante 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. Scegliere il pulsante di opzione Distribuisci come soluzione farm quindi scegliere il pulsante Fine.

    IntelliTrace funziona solo in soluzioni farm.

  7. In Esplora soluzioni, aprire il menu di scelta rapida del nodo Funzionalità quindi scegliere Aggiungi funzionalità.

    Verrà visualizzato Feature1.feature.

  8. Aprire il menu di scelta rapida 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 Feature1EventReceiver 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. Scegliere il tasto 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, nel riquadro Avvio veloce, scegliere il collegamento Elenchi quindi scegliere gli annunci sia sull'elenco 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à aprendo il menu Azioni sito, scegliendo Impostazioni sitoe scegliendo il collegamento Gestisci caratteristiche sito in Azioni sito.Scegliere il pulsante Disattiva accanto a IntelliTraceTest Funzionalità1quindi scegliere il collegamento Disattiva questa caratteristica nella pagina avviso.

  4. Nel riquadro Avvio veloce, scegliere il collegamento Attività.

    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. In Visual Studio, nel metodo FeatureDeactivating, individuare la riga SPQuery qry = new SPQuery(); in visual C# o la riga Dim qry As New SPQuery() in Visual Basic.Scegliere la chiave F9 per inserire un punto di interruzione sulla riga.

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

  2. Scegliere il tasto F5 per eseguire nuovamente il programma e attivare e disattivare la funzionalità ripetendo i passaggi nella sezione “per verificare il progetto„ in questo argomento.

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

  3. Nel riquadro IntelliTrace, nella categoria Evento attivo, scegliere il collegamento Variabili locali.

  4. Scegliere la chiave F11 per passare alla riga di codice successiva.

    Ogni volta che si sceglie la chiave F11, un altro “debugger: „ la riga aggiunta alla cronologia di debug IntelliTrace dell'applicazione.

  5. Scegliere la chiave F11 per passare alla riga di codice successiva.

  6. Nel riquadro Variabili locali, espandere il nome e la nota qry che il valore Query viene visualizzato in rosso.

    Questa distinzione indica che la query per individuare l'attività viene rilevata in modo errato “deactive„ anziché “disattiva.„ Questo errore indica che l'attività non viene mai trovata in query elenco Attività.

  7. Scegliere la chiave F11 per passare alla riga di codice successiva.

  8. Nel riquadro Variabili locali, espandere il nome taskItems e la nota che il valore Conteggio è zero (0).

    Questo valore indica che la raccolta taskItems non contiene elementi qry.

  9. Scegliere il tasto F5 per continuare il debug.

  10. Dopo che il programma, scegliere il collegamento Interrompi tutto nella finestra IntelliTrace.

    È necessario effettuare questo passaggio per salvare i dati IntelliTrace.

    È possibile visualizzare le informazioni sulle chiamate per l'applicazione da, sulla barra degli strumenti Intellitrace, scegliendo il collegamento Apri impostazioni IntelliTrace, quindi nella finestra di dialogo Opzioni, scegliente il pulsante di opzione Eventi IntelliTrace e informazioni di chiamata.

  11. Nella barra degli strumenti IntelliTrace, scegliere il pulsante Salva la sessione corrente di IntelliTrace per salvare i dati di debug.

    L'estensione del file sarà iTrace.

  12. Nella barra dei menu Visual Studio, scegliere Debug, Interrompi debug.

  13. Aprire il file con estensione iTrace.

    Questo passaggio consente di aprire la pagina riepilogo IntelliTrace, che fornisce informazioni di debug quale i dati eccezione e un elenco di thread utilizzati nel programma.

  14. Espandere Elenco dei thread, scegliere Thread principalequindi scegliere il pulsante Avvia debug.

    Questo passaggio consente di avviare una sessione di debug in Visual Studio utilizzando i dati iTrace.Per visualizzare i dettagli su un evento nella finestra IntelliTrace, scegliere l'evento.

  15. Scegliere il collegamento Variabili locali il passaggio Debugger: per SPListItemCollection taskItems = taskList.GetItems(qry);.

    Verrà visualizzata la finestra Variabili locali.

  16. 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".

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. Scegliere il tasto 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

Verifica e debug del codice di SharePoint

Debug di codice più veloce esaminando la relativa cronologia con IntelliTrace

Altre risorse

Procedura dettagliata: verifica del codice di SharePoint tramite unit test