Debugger
Il Debugger mostra lo stato del contratto durante lo svolgimento di una transazione.
Può essere utilizzato su transazioni create su Remix o fornendo l’hash di una transazione. Quest’ultima condizione presuppone che si disponga del codice sorgente del contratto o che si sia inserito l’indirizzo di un contratto verificato.
Per avviare una sessione di debug:
Fare click sul pulsante di debug nel Terminale quando viene visualizzata una transazione riuscita o fallita. Il Debugger verrà attivato e portato in primo piano nel Pannello laterale.
Attivare il Debugger nel Plugin Manager e poi fare clic sul bug nel pannello delle icone. Per avviare la sessione di debug, inserire l’indirizzo di una transazione distribuita, mentre il codice sorgente è nell’editor, quindi fare clic sul pulsante Avvia il debug.
Il debugger evidenzierà il codice pertinente nell’editor. Se si desidera tornare a modificare il codice senza le evidenziazioni del Debugger, fare clic sul pulsante Ferma il debug.
Per saperne di più sull’uso di questo strumento, consultare la pagina [Debug delle transazioni] (tutorial_debug.html).
Questa pagina illustra l’opzione Usa sorgenti generate del Debugger, la sua navigazione e i suoi pannelli.
Usa sorgenti generate
This option is available for contracts using Solidity 0.7.2 or greater. See the solidity blog for more details about generated sources.
L’uso di sorgenti generati renderà più facile la verifica dei contratti. Quando l’opzione è selezionata, è possibile accedere ai risultati del compilatore durante il debug.
Questi output del compilatore appariranno in un file .yul separato nell’editor di Remix.
I Pannelli del Debugger
Pila delle Funzioni
Lo pila delle funzioni elenca le funzioni con cui la transazione sta interagendo.
Solidity Locals
Le «Solidity Locals» sono le variabili locali all’interno di una funzione.
Stato di Solidity
Queste sono le variabili di stato del contratto.
Codici operativi
Questo pannello mostra il numero di passaggio e il codice operativo su cui si trova attualmente il debugger.
As you drag the slider (which is above the navigation buttons), the focused step number & opcode changes.
Dettagli del passaggio
I dettagli del passaggio mostrano ulteriori informazioni sul passaggio del codice operativo.
Pila
Questo pannello mostra la pila EVM.
Per maggiori informazioni sulla stack.
Memoria
La memoria viene svuotata per ogni nuova invocazione di messaggio. La memoria è lineare e ci si può rivolgere a livello di byte. Le letture sono limitate a una larghezza di 256 bit, mentre le scritture possono essere di 8 o 256 bit.
Il pannello Memoria è composto da 3 colonne. Potrebbe essere necessario allargare un po” il pannello laterale di Remix per ottenere una formattazione corretta. (Trascina il bordo tra il pannello principale e quello laterale verso destra).
La prima colonna è la posizione in memoria. La seconda colonna è il valore codificato in esadecimale. La terza colonna è il valore decodificato. Se non c’è nulla, vengono mostrati dei punti interrogativi (?), come in questo caso:
0x10: 00000000000000000000000000000000 ????????????????
Ecco un esempio completo del pannello Memoria
Alcuni slot di indirizzo hanno valori codificati in esadecimale e tali valori vengono poi decodificati. Ad esempio, controllare le posizioni 0xa0 e 0x140.
Archiviazione
This is the persistent storage.
Stack di Chiamata
Tutte le computazioni sono eseguite su un array di dati chiamato call stack. Ha una grandezza massima di 1024 elementi e contiene parole di 256 bits.
Dati di Chiamata
I dati di chiamata contengono i parametri delle funzioni.
Valore Restituito
Si riferisce al valore che la funzione restituirà.
Modifiche Complete dell’Archiviazione
This shows the persistent storage at the end of the function.
Punti di interruzione
Per mettere in pausa il debugger, è possibile posizionare dei punti di interruzione nel riquadro dell’editor.
Ulteriori Informazioni
Le informazioni minuziose del debugger forniscono agli utenti informazioni dettagliate su ciò che accade in una transazione, quindi non solo il debugger è utile per il debugging, ma è anche un eccellente strumento didattico.
Per imparare a usare il debugger, consultare [Debug delle transazioni] (tutorial_debug.html).