Snippet: funzione di debug

Una delle cose più complesse negli script di SL è quella di affrontare la fase di debug. Ho scritto una minuscola funzione che mi consente il debug in maniera rapida e semplice e credo sia utile condividere questa riga di codice in quanto mi ha fatto risparmiare un sacco di tempo:

integer DEBUG = TRUE;
debug(list _lst)
{
    if(DEBUG) llOwnerSay(llDumpList2String(_lst," "));
}

La comodità è che possiamo chiamarla senza alcun casting dei dati come da esempio:

debug( ["x=",x,"y=",y,"z=",z,"vettore=",vector] );

Comodo no?

Se vogliamo effettuare un debug in un ciclo:

list deb=[];
for( i=0; i<l; i++) {
    //.....
    deb += ["i vale",i, "pippo=",pippo];
}
debug(deb);

Unica accortezza deve essere usata per le liste:

list giorni=["LU","MA","ME","GI","VE","SA","DO"];
debug( ["giorni vale"] + giorni + ["i=",i] );

Questo perché una lista non può contenere liste e scrivendo:

debug(  ["giorni vale", giorni,"i=",i]);

otterremmo un errore di runtime

Ora un altro trucco per attivare e disattivare il debug senza modificare lo script. Personalmente utilizzo il touch verificando il tempo di pressione del tasto del mouse. Se è corto (diciamo < 2 secondi) faccio le cose che dovrei fare al touch, se supera quel tempo cambio stato a DEBUG:

 

integer DEBUG=FALSE;
default
{
    state_entry() { }

    // quando inizia il touch resetto il time
    touch_start(integer total_number) {  float x = llGetAndResetTime(); }

    // quando il tasto viene rilasciato gestisco l'evento
    touch_end(integer total_number) 
    {
        // se sono passati più di due secondi e chi tocca è l'owner
        if( llGetTime() > 2.0 && llGetOwner() == llDetectedKey(0) ) {
            if( DEBUG ) { DEBUG = FALSE; llOwnerSay("DEBUG OFF"); }
            else { DEBUG = TRUE; llOwnerSay("DEBUG ON"); }
        } else {
            // altro codice touch
        }
    }
}

Spero di essere stato minimalisticamente utile a qualcuno

Vittorio Bing

Advertisements
This entry was posted in Scripting avanzato. Bookmark the permalink.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s