0Pricing
Lua Academy · Lektion

Zustandsverwaltung und Fehlerbehandlung

Verwenden Sie lua_pcall für geschützte Aufrufe und behandeln Sie Fehler in der C-Schicht

Zustandsverwaltung und Fehlerbehandlung ist eine kostenlose Lua Academy-Lektion auf CoddyKit. Dies ist Lektion 4 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Lua Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Lua Academy-Kurs umfasst insgesamt 4 Lektionen.

Mehrere Lua-Zustände

Sie können mehrere Instanzen von lua_State im selben Prozess ausführen. Jede ist vollständig unabhängig: separate globale Variablen, separate Stacks und standardmäßig kein gemeinsamer Speicher.

Thread-Zustände

lua_newthread(L) erstellt einen untergeordneten Thread (eine Coroutine), der dieselbe globale Umgebung nutzt, aber einen eigenen Stack besitzt. So werden Lua-Coroutines in C implementiert.

Daten zwischen Zuständen teilen

Daten können nicht direkt zwischen unabhängigen Lua-Zuständen übergeben werden. Serialisieren Sie sie in Strings oder verwenden Sie gemeinsam genutzte Speicherstrukturen auf C-Seite, auf die über Userdata zugegriffen werden kann.

Geschützte und direkte Aufrufe

lua_pcall fängt Fehler ab (intern mithilfe von setjmp/longjmp). lua_call gibt Fehler weiter und bricht das Programm ab. Verwenden Sie in Produktionsumgebungen immer lua_pcall.

// Safe:
if (lua_pcall(L, nargs, nresults, 0) != LUA_OK) {
  const char *err = lua_tostring(L, -1);
  lua_pop(L, 1);
  // handle error
}

Fehlerobjekte

Fehler in Lua können beliebige Werte sein, nicht nur Strings. error({code=404, msg="not found"}) legt eine Tabelle als Fehler ab. C-Code liest sie bei einem fehlgeschlagenen pcall vom Stack.

Panic-Handler

Wenn ein Fehler aus einem pcall entweicht (beispielsweise aus einer ungeschützt aufgerufenen C-Funktion), ruft Lua vor dem Abbruch den über lua_atpanic(L, fn) festgelegten Panic-Handler auf.

// C code
lua_atpanic(L, function(lua_State *L) {
  fprintf(stderr, "PANIC: %s\n", lua_tostring(L, -1));
  exit(1);
  return 0;
});

Stack-Wiederherstellung bei Fehlern

Nach einem Fehler von lua_pcall wird der Stack auf den Zustand vor dem Aufruf zurückgesetzt (ohne Funktion und Argumente, aber mit dem Fehlerobjekt an der Spitze).

Zustand bereinigen

Schließen Sie den Zustand nach Gebrauch immer mit lua_close(L). Dadurch werden alle __gc-Finalizer ausgelöst und der gesamte reservierte Speicher freigegeben.

Thread-Sicherheit

Ein Lua-Zustand ist nicht threadsicher. Rufen Sie niemals gleichzeitig zwei C-API-Funktionen für denselben Zustand auf. Verwenden Sie einen Zustand pro Betriebssystem-Thread oder serialisieren Sie den Zugriff mit einem Mutex.

Speicherallokator

Standardmäßig verwendet Lua realloc. Stellen Sie mit lua_newstate(allocFn, ud) einen benutzerdefinierten Allokator für Speicherüberwachung, Begrenzungen oder eigene Pools bereit.

Sandboxing mit mehreren Zuständen

Führen Sie nicht vertrauenswürdigen Code in einem neuen, isolierten Lua-Zustand aus, in dem keine Standardbibliotheken geladen wurden. Jeder Absturz oder jede Ressourcenerschöpfung bleibt auf diesen Zustand beschränkt.

Frage zur Fehlerbehandlung

Was ist der Unterschied zwischen lua_call und lua_pcall?

Zusammenfassung: Zustände und Fehler verwalten

Verwenden Sie in Produktionsumgebungen lua_pcall (niemals lua_call). Setzen Sie einen Panic-Handler für die Wiederherstellung als letztes Mittel. Verwenden Sie einen Zustand pro Thread. Nutzen Sie mehrere isolierte Zustände für Sandboxing. Rufen Sie zur Bereinigung immer lua_close auf.

Häufig gestellte Fragen

Ist die Lektion „Zustandsverwaltung und Fehlerbehandlung“ kostenlos?

Ja — der vollständige Text von „Zustandsverwaltung und Fehlerbehandlung“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Lua Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Lua Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Zustandsverwaltung und Fehlerbehandlung“?

Verwenden Sie lua_pcall für geschützte Aufrufe und behandeln Sie Fehler in der C-Schicht Du übst Lua Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um Lua Academy zu starten?

Keine Vorkenntnisse erforderlich. Lua Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 4 von 4.

Wie lange dauert die Lektion „Zustandsverwaltung und Fehlerbehandlung“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser Lua Academy-Lektion Code schreiben und ausführen?

Ja. Jede Lua Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Das Stack-Modell der Lua-C-API
  2. Lua-Funktionen aus C aufrufen
  3. C-Funktionen in Lua registrieren
  4. Zustandsverwaltung und Fehlerbehandlung
← Zurück zu Lua Academy