News:

SMF - Just Installed!

 

Metodo semplice per debugging

Aperto da Absynth, Agosto 23, 2010, 09:11:19 PM

Discussione precedente - Discussione successiva

Absynth

Quando lo script diventa lungo, complesso, pieno di variabili e richiami a funzioni che costringono sempre a scrollare su e giù lo script, è facile perdersi, o "perdere il filo" in caso, una volta compilato lo script, esso si comporti come non volevamo.

E' utile allora sapere "dove si trova" lo script mentre è in esecuzione, in modo da capire in che punto dello script intervenire.

Esempio, se tocco un pulsante, l'oggetto A deve processare dei dati e poi dirmi in chat la risposta, ma ciò non accade.. come faccio a sapere se parte la funzione giusta quando tocco, oppure l'errore è dopo l'elaborazione?

Di solito si mettono degli llOwnerSay che ci dicano qualcosa di utile e ci facciano capire se lo script "arriva lì" o no, o per controllare il valore di variabili.

Seguendo l'esempio di prima, al touch deve partire una funzione, allora lì dentro mettiamo un llOwnerSay("son stato toccato"); e dove verrà elaborato il valore, un llOwnerSay("ho elaborato valore uguale a " + (string)valore));

Se tocchiamo e non ci dice "son stato toccato", allora l'errore sappiamo già a grandi linee dov'è (nella funzione), se invece non ci dice "ho elaborato valore uguale a" allora l'errore sta là, o magari vediamo che ci dà un valore, ma è sbagliato.

Quindi è utile usare llOwnerSay per orientarci meglio.
(non usare mai llSay o llWhisper, la funzione è più lunga da scrivere perchè necessita anche del canale, ma soprattutto possiamo dare fastidio ad altri nelle vicinanze.)


Tutto questo discorso lungo e inutile (per chi fa già così) serve ad introdurre un modo veloce per ABILITARE o no i "say di debug" nel caso che in qualche momento non ci interessino perchè ci intasano troppo la chat.

Se per ogni punto da debuggare avessimo messo un llOwnerSay, e ce ne troviamo sparsi per lo script una ventina, per non averli più fra i piedi 1) li cancelliamo 2) li commentiamo.. uno a uno, per poi 1) riscriverceli o 2) decommentarli se ci servono ancora, sempre uno ad uno.

Perdita di tempo inutile.

Ecco il rimedio:

integer debugging = TRUE;

debug(string mes){
     if(debugging) llOwnerSay(mes);
}

nei punti strategici non dobbiamo far altro che scrivere
debug("messaggio da dire");
invece degli llOwnerSay.

Quando i messaggi di debug non ci interessano, basterà inizializzare l'integer "debugging" in testa allo script come FALSE per "metterli in mute", e di nuovo a TRUE per abilitarli ancora.

Quando poi non serviranno proprio più, basta eliminare la funzioncina in testa allo script, e con un bel search "debug(" si troveranno tutte le righe da cancellare in pochi minuti, una volta sola.