THE ORB
Arrancando el studio

desbordamiento de pila

Un script se llamó a sí mismo una y otra vez hasta quedarse sin sitio. Algo está entrando en bucle sobre sí mismo.

groupsEse script muere del todocodeNecesita un desarrollador

Haz esto primero

Anota qué recurso nombra y páralo: va a seguir llevándose por delante a los demás.

bug_reportMejor pega tu consola entera

Qué significa

Una función se llamó a sí misma, directamente o a través de una cadena, hasta que Lua se quedó sin pila de llamadas. El script se detiene ahí. En un servidor esto suele llevarse el recurso entero al arrancar, y por eso aparece como «stack overflow justo después de arrancar».

Qué lo provoca

Ordenado por la frecuencia con la que es la respuesta.

  1. 1

    Recursión directa sin caso base

    Una función que siempre se llama a sí misma. Rara a propósito, común por accidente cuando a dos funciones les pusieron el mismo nombre.

  2. 2

    Un evento que se dispara a sí mismo

    Un manejador de myres:update que llama a TriggerEvent('myres:update', ...) dentro de sí mismo. Cada disparo es síncrono, así que recurre.

  3. 3

    Un __index de metatabla que apunta a sí mismo

    setmetatable(t, { __index = t }). Cualquier clave que falte recurre para siempre.

  4. 4

    Dos recursos disparándose el uno al otro

    A dispara el evento de B, y el manejador de B dispara el de A. Ninguno de los dos archivos parece recursivo por su cuenta.

  5. 5

    Una tabla profunda serializada con un ciclo

    json.encode sobre una tabla que se contiene a sí misma.

Cómo saber cuál es el tuyo

La traza se repite. Buscá el mismo archivo y la misma línea apareciendo una y otra vez en los marcos: ese par es el bucle. Si la traza está cortada, poné un print en la cabecera de la función sospechosa y mirala dispararse sin fin.

Dónde mirar

El marco que se repite en la traza.

Cómo arreglarlo

Dale un suelo a la recursión, o cortá el ciclo de eventos:

-- un evento que no tiene que volver a entrar en sí mismo
local updating = false
AddEventHandler('myres:update', function(data)
    if updating then return end
    updating = true
    -- trabajo
    updating = false
end)

¿Sigues atascado en tu propio código?

Esta página es lo que suele significar este error. Pega tu consola en Server Fixer y ordenará todo lo que haya en ella y te dirá qué hacer primero; y si prefieres no tocarlo, ORBIE puede reparar el script y devolverte el recurso listo para soltar.

bug_reportAbrir el Server Fixer

Para este tipo de error, el Script Optimizer lee el script y repara el código que hay detrás.

Errores que viajan con este