LSL Errors/fr

From Second Life Wiki
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)

N'écrivez pas d'absurdités. Par exemple, ne créez une liste dont l'unique entrée 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 de mettre une liste dans une liste.

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

Nombre en virgule flottante ou entier 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 un script trop gros, 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/fr.

Exemples de scripts provoquant une 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 un = 1.0;
        float zero = 0.0;
        float quotient = un / 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 nommer chacune des composantes .x .y .z .s d'un vecteur ou d'une rotation que vous définissez, 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
    ... // ou 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 Mac OS 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 concernant 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 enregistrer les changements qu'ils y feraient.

Voir llGetFreeMemory/fr et llMessageLinked/fr.

ERROR : erreur de syntaxe (Syntax error)

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

Là aussi, la taille du script peut jouer. Étonnamment, 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" ou "byte code assembly failed" quand vous avez écrit 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.