lua Skriptfehlerprüfung

8

Ist es möglich, zu überprüfen, ob ein Lua-Skript Fehler enthält, ohne es auszuführen? Ich habe folgenden Code:

%Vor%

Aber wenn das Skript Fehler enthält, übergibt es zuerst, wenn es ausgeführt wird. Ich möchte wissen, ob es Fehler enthält, wenn ich es lade, nicht wenn ich es ausführe. Ist das möglich?

    
Felics 09.03.2011, 17:28
quelle

3 Antworten

6

(Das war ursprünglich als eine Antwort auf den ersten Kommentar zu Krteks Frage gedacht, aber ich hatte dort keinen Platz mehr und um ehrlich zu sein, funktioniert das als Antwort ganz gut.)

Funktionen sind im Wesentlichen Werte, und daher ist eine benannte Funktion tatsächlich eine Variable dieses Namens. Nach ihrer Definition können Variablen sich ändern, wenn ein Skript ausgeführt wird. Verdammt, jemand könnte versehentlich eine dieser Funktionen neu definieren. Ist das schlecht? Um meine Gedanken zusammenzufassen: Abhängig vom Skript, den übergebenen Parametern und / oder tatsächlichen Implementierungen der vordefinierten Funktionen, von denen Sie sprechen (man könnte sich selbst oder andere deaktivieren), ist es nicht möglich zu garantieren, dass die Dinge funktionieren, wenn Sie es nicht sind bereit, einige Ihrer Forderungen einzuschränken. Lua ist zu dynamisch für das, wonach Sie suchen. :)

Wenn Sie einen fehlerlosen Test durchführen möchten: Erstellen Sie eine Dummy-Umgebung mit allen wichtigen Funktionen und sehen Sie, ob sie irgendwo auf dem Weg abstürzt (Laden, Ausführen usw.). Dies ist im Grunde eine Art Unit Test, und als solches wäre ziemlich schwer.

Wenn Sie eine Basisprüfung durchführen möchten, um zu sehen, ob ein Skript eine gültige Syntax hat : Krtek hat darauf bereits eine Antwort gegeben. Ich bin ziemlich sicher (aber nicht 100%), dass das Lua-Äquivalent zu loadfile oder loadstring ist, und das entsprechende C-Äquivalent ist zu versuchen und lua_load() der Code, von denen jeder lesbares Skript in Bytecode konvertieren, was Sie würden müssen Sie bereits tun, bevor Sie den Code tatsächlich in Ihrem normalen All-Is-Well-Anwendungsfall ausführen konnten. (Und wenn diese Funktionsdefinitionen enthielt, müssten diese später für den Code ausgeführt werden, der in den ausführbaren Codes enthalten ist.)

Dies sind jedoch die Möglichkeiten Ihrer Möglichkeiten, Fehler zu vermeiden, bevor sie tatsächlich auftreten. Lua ist eine sehr dynamische Sprache, und was eine große Stärke ist, macht auch eine Schwäche, wenn man Korrektheit beweisen will. Es sind einfach zu viele Variablen für eine perfekte Lösung beteiligt.

    
Stigma 09.03.2011, 20:48
quelle
6

Sie können den LUA-Compiler verwenden. Es wird nur Ihre Datei zu Bytecode kompilieren, ohne es auszuführen.

Ihr Programm wird auch den Vorteil haben, dass es schneller ausgeführt wird, wenn es kompiliert wird.

Sie können sogar die Option -p verwenden, um gemäß der verknüpften Manpage nur eine Syntaxprüfung durchzuführen:

  

-p lädt Dateien, erzeugt aber keine Ausgabedatei. Wird hauptsächlich zur Syntaxprüfung oder zum Testen vorkompilierter Chunks verwendet: Beschädigte Dateien erzeugen beim Laden wahrscheinlich Fehler. Verwenden Sie für einen ausführlichen Integritätstest -t.

    
krtek 09.03.2011 17:35
quelle
4

Im Allgemeinen ist es nicht möglich, da Lua eine dynamische Sprache ist und die meisten Fehler in Laufzeit auftreten.

Wenn Sie nach Syntaxfehlern suchen möchten, verwenden Sie die Option luac -p . Ich benutze es zum Beispiel als Teil meines Pre-Commit Hooks.

Andere häufige Fehler werden durch Missbrauch der globalen Variablen ausgelöst. Sie können die Ausgabe von luac -l analysieren, um diese Fälle zu erfassen. Siehe hier: Ссылка .

Wenn Sie etwas fortgeschritteneres wollen, gibt es mehrere mehr oder weniger funktionale statische Analyse-Tools für Lua-Code. Beginnen Sie mit LuaInspect .

In jedem Fall sollten Sie Komponententests schreiben, anstatt sich nur auf statische Code-Prüfungen zu verlassen. Weniger Schmerz, mehr Gewinn.

    
Alexander Gladysh 18.03.2011 01:51
quelle

Tags und Links