LSL Errors/fr

From Second Life Wiki
< LSL Errors
Revision as of 11:45, 11 December 2007 by Samia Bechir (talk | contribs) (Première traduction en Français *non vérifiée*)
Jump to navigation Jump to search

Messages d'erreur pendant l'exécution (Run-time error)

L'exécution du script s'arrête, et vous avez un message d'erreur en chat : "Script run-time error", suivi d'un autre message d'erreur tel que :

Script run-time error: Heap Error (erreur de tas)

Evitez le non-sens. Par exemple, ne faites pas une liste à une seule entrée qui est le résultat d'une routine qui ne renvoie pas de résultat.

Script run-time error: Lists may not contain lists (les listes ne peuvent pas contenir de listes)

N'essayez pas d'ajouter une liste dans une liste.

Script run-time error: Math Error (erreur mathématique)

Float ou Integer divisé par zéro, etc.

Script run-time error: Stack-Heap Collision (collision entre tas et pile)

La pile est entrée en collision avec le tas ou le bytecode.

Chaque script s'exécute en utilisant 16 Ko de mémoire, partagée entre bytecode, tas et pile.

Vous pouvez provoquer une collision si vous compilez trop de scripts, ce qui produit trop de bytecode. Le script est compilé et sauvegardé sans erreur, mais lorsque vous rezzez un objet qui contient ce script, il crashe, immédiatement ou durant l'exécution.

Voir llGetFreeMemory.

Exemples de scripts provoquant Run-time error

Compilez et exécutez ces exemples pour obtenir les messages d'erreur pendant l'exécution (run-time error en chat).

default
{
    state_entry()
    {
        llOwnerSay((string) [llOwnerSay("bye")]); // Script run-time error: Heap Error (erreur de tas)
    }
}
default
{
    state_entry()
    {
        list once = [];
        list twice = [once, once]; // Script run-time error: Lists may not contain lists (les listes ne peuvent pas contenir de listes)
    }
}
default
{
    state_entry()
    {
        float one = 1.0;
        float zero = 0.0;
        float quotient = one / zero; // Script run-time error: Math Error (erreur mathématique)
        llOwnerSay((string) quotient);
    }
}
default
{
    state_entry()
    {
        list entries = [0];
        while (TRUE)
        {
            entries += entries; // Script run-time error: Stack-Heap Collision (collision tas/pile)
            llOwnerSay((string) llGetListLength(entries));
        }
    }
}

messages d'erreur pendant la compilation (Compile-time error messages)

L'interface de SL peut rejeter du code qui vous paraissait pourtant clair, et vous renvoyer une erreur puis un message d'explication.

ERROR : Mauvais type (Type mismatch)

Vous devez définir chacune des composantes .x .y .z .s d'un vecteur ou d'une rotation, vous ne pouvez pas les allouer en une seule fois avec une liste, par exemple :

default
{
    state_entry()
    {
        vector vec = (vector) [1, 2, 3]; // ERROR : Type mismatch (mauvais type)
        llOwnerSay((string) vec);
    }
}

ERROR : erreur de mémoire (Byte code assembly failed -- out of memory)

Chaque script doit être d'une taille raisonnable.

Par exemple, le compilateur dira que le script est trop grand si vous utilisez trop de else/if en cascade.

demoElseIfCompileError(integer count)
{
    if (count == 0)
    {
        ;
    }
    else if (count == 1)
    {
        ;
    }
    else if (count == 2)
    {
        ;
    }
    ...
    ... // ERROR : Byte code assembly failed -- out of memory
    ... // or ERROR : Syntax error
    ...
    else if (count == ...)
    {
        ;
    }
}

La limite à partir de laquelle un script est trop long varie étonnamment. Par exemple, cette limite variait dans un rapport de 1 à 30 dans les clients SL d'août 2007. Plus précisément le client Windows acceptait 22 else/if et refusait s'il y en avait 23, alors que le client MacOs en acceptait 692 et rejetait à partir de 693.

Les limites de compilation varient en fonction du système d'exploitation en raison des limites propres ceux ci sur la taille de ce qui peut être copié. Tous les résidents peuvent exécuter les scripts écrits par ceux dont la limite est la plus élevée, mais les résidents qui auront une limite plus basse ne pourront pas sauver les changements qu'ils y feraient.

Voir llGetFreeMemory, llMessageLinked.

ERROR : erreur de syntaxe (Syntax error)

Evidement, le compilateur attend de vous une orthographe et une ponctuation impeccables.

Là aussi, la taille du script peut jouer. Etonnamment, le compilateur peut vous renvoyer un message "syntax error", au lieu de vous informer poliment qu'il s'agit d'un problème de taille avec un message "out of memory" "byte code assembly failed", quand vous avez fait un script de taille excessive.

Par exemple, le client Windows d'aout 2007 renvoyait Syntax error au dela de 22 else/if en cascade, et meme parfois au delà de 18, en fonction de ce qu'il y avait d'autre dans le script.