Håndtering af tilstand og fejl
Brug lua_pcall til beskyttede kald, og håndtér fejl i C-laget.
Håndtering af tilstand og fejl er en gratis Lua Academy-lektion på CoddyKit. Dette er lektion 4 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i Lua Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Lua Academy-kurset indeholder 4 lektioner i alt.
Flere Lua-tilstande
Du kan køre flere instanser af lua_State i den samme proces. Hver instans er fuldstændig uafhængig: separate globale værdier, separate stacks og som standard ingen delt hukommelse.
Trådtilstande
lua_newthread(L) opretter en underordnet tråd (coroutine), der deler det globale miljø, men har sin egen stack. Det er sådan, Lua-coroutiner implementeres i C.
Deling af data mellem tilstande
Data kan ikke overføres direkte mellem uafhængige Lua-tilstande. Serialisér dem til strenge, eller brug delte hukommelsesstrukturer på C-siden, som er tilgængelige via userdata.
Beskyttede kald kontra rå kald
lua_pcall opfanger fejl (og bruger setjmp/longjmp internt). lua_call viderefører fejl og afbryder programmet. Brug altid lua_pcall i produktion.
// Safe:
if (lua_pcall(L, nargs, nresults, 0) != LUA_OK) {
const char *err = lua_tostring(L, -1);
lua_pop(L, 1);
// handle error
}Fejlobjekter
Fejl i Lua kan være en hvilken som helst værdi — ikke kun strenge. error({code=404, msg="not found"}) skubber en tabel på stakken som fejlen. C-kode læser den fra stakken, hvis pcall mislykkes.
Panic-håndtering
Hvis en fejl slipper ud af et pcall (f.eks. fra en C-funktion, der kaldes uden beskyttelse), kalder Lua den panic-håndtering, der er angivet via lua_atpanic(L, fn), før processen afbrydes.
// C code
lua_atpanic(L, function(lua_State *L) {
fprintf(stderr, "PANIC: %s\n", lua_tostring(L, -1));
exit(1);
return 0;
});Gendannelse af stakken ved fejl
Efter en fejl i lua_pcall gendannes stakken til tilstanden før kaldet (minus funktionen og argumenterne samt med fejlobjektet øverst).
Oprydning af tilstanden
Luk altid tilstanden med lua_close(L), når du er færdig. Det udløser alle __gc-finalizere og frigiver al allokeret hukommelse.
Trådsikkerhed
En Lua-tilstand er ikke trådsikker. Kald aldrig to C API-funktioner samtidigt på den samme tilstand. Brug én tilstand pr. OS-tråd, eller brug en mutex til at serialisere adgangen.
Hukommelsesallokator
Som standard bruger Lua realloc. Angiv en brugerdefineret allokator med lua_newstate(allocFn, ud) til hukommelsessporing, begrænsninger eller brugerdefinerede pools.
Sandboxing med flere tilstande
Kør kode, du ikke har tillid til, i en ny, isoleret Lua-tilstand uden indlæste standardbiblioteker. Nedbrud eller opbrug af ressourcer begrænses til denne tilstand.
Spørgsmål om fejlhåndtering
Hvad er forskellen mellem lua_call og lua_pcall?
Opsummering: Håndtering af tilstand og fejl
Brug lua_pcall (aldrig lua_call) i produktion. Angiv en panic-håndtering til sidste udvej. Brug én tilstand pr. tråd. Brug flere isolerede tilstande til sandboxing. Kald altid lua_close for at rydde op.
Lær Lua med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 40
- Lektioner
- 159
Ofte stillede spørgsmål
Er lektionen “Håndtering af tilstand og fejl” gratis?
Ja — alle 3 lektioner i læringssporet Lua Academy, inklusive “Håndtering af tilstand og fejl”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Lua Academy-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “Håndtering af tilstand og fejl”?
Brug lua_pcall til beskyttede kald, og håndtér fejl i C-laget. Du øver dig i Lua Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på Lua Academy?
Der kræves ingen tidligere erfaring. Lua Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 4 af 4.
Hvor lang tid tager lektionen “Håndtering af tilstand og fejl”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne Lua Academy-lektion?
Ja. Alle Lua Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- Stackmodellen i Lua C API
- Kald af Lua-funktioner fra C
- Registrering af C-funktioner i Lua
- Håndtering af tilstand og fejl