Esaminare gli oggetti nei checkpoint
Obiettivi di apprendimento
Al completamento di questa unità, sarai in grado di:
- Impostare checkpoint nel codice Apex.
- Analizzare gli oggetti in memoria usando Checkpoint Inspector (Controllo checkpoint).
Impostare checkpoint nel codice Apex
Se l'astronave rileva errori di sistema, bisogna mettere subito mano ai registri per capire qual è il problema e dove si è verificato.
Analogamente, quando il codice Apex genera errori, non funziona in modo ottimale o non produce i risultati desiderati, la prima azione da compiere è identificare il problema usando il registro di debug. Ispezionare il registro riga per riga è un compito noioso. È qui che i checkpoint vengono in aiuto. I checkpoint mostrano in tempo reale quello che succede in determinati punti del codice Apex durante l'esecuzione.
È possibile impostare fino a cinque checkpoint nel codice Apex. I checkpoint non sono disponibili per il markup di Visualforce.
Impostiamo un checkpoint nella classe EmailMissionSpecialist
che abbiamo creato prima.
- Seleziona File | Open (Apri), e apri la classe
EmailMissionSpecialist
.
- Seleziona Debug | Change Log Levels (Cambia livelli di registro).
- Nella sezione General Trace Settings for You (Impostazioni generali di tracciamento per te), fai clic su Add/Change (Aggiungi/Cambia).
- Imposta il livello di registro
ApexCode
su FINEST (Più dettagliato).
Nota: per impostare i checkpoint, è necessaria l'autorizzazione utente Visualizza tutti i dati. Per generare risultati usando i checkpoint, esegui il codice usando Execute Anonymous (Esecuzione anonima) o imposta un flag di traccia DEVELOPER_LOG. Il flag di traccia deve avere un livello di registro per Apex con valore INFO o superiore.
- Per salvare le modifiche, fai clic su Done (Chiudi).
- Per uscire dalla finestra di dialogo Change Log Levels (Cambia livelli di registro), fai clic su Done (Chiudi).
Quando il codice viene visualizzato nell'editor di codice sorgente, a sinistra appaiono i numeri di riga. Fai clic sul numero di riga corrispondente a inspectResults(results);
. Appare un punto rosso (1), che indica che è stato creato un checkpoint.
Ora è possibile eseguire il codice e analizzarlo tramite la scheda Checkpoints.
Scheda Checkpoints
La scheda Checkpoints mostra con precisione gli errori di esecuzione del codice e i valori degli oggetti in quei punti. Eseguiamo questo codice per vedere il checkpoint in azione.
Seleziona Debug | Open Execute Anonymous Window (Apri finestra di esecuzione anonima). Inserisci ed esegui il seguente codice. Assicurati di sostituire Enter your email address (Inserisci indirizzo email) con il tuo indirizzo email.
EmailMissionSpecialist em = new EmailMissionSpecialist(); em.sendMail('Enter your email address', 'Flight Path Change', 'Mission Control 123: Your flight path has been changed to avoid collision ' + 'with asteroid 2014 QO441.');
Dopo aver eseguito correttamente il codice Apex, apri il registro di debug e fai clic sulla scheda Checkpoints per vedere i risultati.
- Nella tabella Checkpoints sono riportati lo spazio dei nomi, la classe e il numero di riga di ciascun checkpoint. La tabella indica inoltre la data e l'ora di creazione di ogni checkpoint.
- Nella tabella Checkpoint Locations (Posizioni checkpoint) sono riportati il nome del file, il numero di riga e le iterazioni acquisite dal checkpoint selezionato.
Fai doppio clic su un checkpoint nella tabella Checkpoints per visualizzare i risultati acquisiti in Checkpoint Inspector (Controllo checkpoint). Ora inizia il divertimento!
Checkpoint Inspector (Controllo checkpoint)
Checkpoint Inspector (Controllo checkpoint) contiene due schede: Heap e Symbols (Simboli).
-
Heap: mostra tutti gli oggetti presenti in memoria sulla riga di codice in cui è stato eseguito il checkpoint.
-
Symbols (Simboli): mostra tutti i simboli presenti in memoria in una visualizzazione ad albero.
Scheda Heap
La scheda Heap include alcuni grandi riquadri per il debug, tra cui il riquadro Types (Tipi). In questo riquadro sono visualizzati gli oggetti per cui sono state create istanze e la memoria utilizzata in byte. Diamo un'occhiata ai dettagli ottenuti tramite il checkpoint impostato.
- In Types (Tipi), fai clic su
Messaging.SingleEmailMessage
.
- In Instances (Istanze), fai clic su qualsiasi istanza di questo tipo di oggetto.
- In State (Stato), visualizza i campi dell'oggetto e i loro valori.
Scheda Symbols (Simboli)
La scheda Symbols (Simboli) offre un modo semplice e veloce per esaminare gli stati dei vari oggetti in qualsiasi checkpoint. I simboli sono nomi univoci che fanno riferimento a determinati oggetti. La scheda mostra tutti i simboli in memoria che usano la visualizzazione struttura.
Un comandante non deve solo controllare se i sistemi funzionano correttamente, ma anche rintracciare gli errori. Vediamo in che modo la funzione Checkpoint Inspector (Controllo checkpoint) può favorire la comprensione del codice.
- Per cancellare i risultati dei checkpoint dalla scheda, seleziona Debug | Clear (Cancella) | Checkpoint Results Panel (Riquadro risultati checkpoint).
- Seleziona Debug | Open Execute Anonymous Window (Apri finestra di esecuzione anonima).
- Riesegui la classe
EmailMissionSpecialist
, questa volta con un indirizzo email non valido, ad esempio testingemail.EmailMissionSpecialist em = new EmailMissionSpecialist(); em.sendMail('testingemail', 'Flight Path Change', 'Mission Control 123: Your flight path has been changed to avoid collision ' + 'with asteroid 2014 QO441.');
- Dopo aver eseguito il codice, fai clic sulla scheda Checkpoints.
La scheda Checkpoints non mostra alcun risultato, perché l'esecuzione del codice non ha raggiunto il numero di riga in cui è stato impostato il checkpoint.
Aggiungiamo un checkpoint nella parte iniziale del codice, in modo da acquisire le informazioni nel nuovo checkpoint prima che il codice rilevi l'errore associato a testingemail.
- Seleziona File | Open (Apri) e apri la classe
EmailMissionSpecialist
.
- Fai clic sul numero di riga a sinistra di
String[] toAddresses = new String[] {address}
.
- Seleziona Debug | Clear (Cancella) | Checkpoint Results Panel (Riquadro risultati checkpoint).
- Seleziona Debug | Open Execute Anonymous Window (Apri finestra di esecuzione anonima).
- Riesegui la classe
EmailMissionSpecialist
con un indirizzo email non valido, ad esempio testingemail.EmailMissionSpecialist em = new EmailMissionSpecialist(); em.sendMail('testingemail', 'Flight Path Change', 'Mission Control 123: Your flight path has been changed to avoid collision ' + 'with asteroid 2014 QO441.');
- Fai clic sulla scheda Checkpoints.
Verrà visualizzata una nuova voce nella scheda Checkpoints. Ora è possibile analizzare gli oggetti in memoria usando Checkpoint Inspector (Controllo checkpoint).
Risorse
- Guida di Salesforce: Scheda Checkpoints
- Guida di Salesforce: Impostare i checkpoint nel codice Apex
- Guida di Salesforce: Checkpoint Inspector (Controllo checkpoint)