Zum Inhalt springen

Debuggen

Der Zweck der Tests ist herauszufinden, wann etwas kaputtgeht. Unvermeidlich führen Änderungen am System dazu, dass ein Test fehlschlägt – und dann muss der Test debuggt werden.

Zuerst empfiehlt es sich immer, im Debug-Modus zu arbeiten. Dazu kompilieren Sie das System mit dem Befehl make debug. Zweitens sollten Sie nur den fehlschlagenden Test ausführen. Dazu übergeben Sie den Dateinamen des fehlschlagenden Tests als Kommandozeilenparameter an die Testsuite (z. B. build/debug/test/unittest test/sql/projection/test_simple_projection.test). Weitere Optionen, um nur eine Teilmenge der Tests auszuführen, finden Sie im Abschnitt Festlegen, welche Tests ausgeführt werden.

Anschließend können Sie einen Debugger an das Programm anhängen und den Test debuggen. In den sqllogictests ist es normalerweise schwierig, an einer bestimmten Abfrage anzuhalten. Die Testsuite wurde jedoch so erweitert, dass für jede ausgeführte Abfrage eine Funktion namens query_break mit der Zeilennummer line als Parameter aufgerufen wird. Damit können Sie einen bedingten Haltepunkt auf eine bestimmte Abfrage setzen. Wenn wir zum Beispiel in Zeile 43 der Testdatei anhalten möchten, können wir folgenden Haltepunkt anlegen:

gdb: break query_break if line==43
lldb: break s -n query_break -c line==43

Sie können auch bestimmte Abfragen von der Ausführung ausnehmen, indem Sie mode skip in die Datei schreiben, gefolgt von einem optionalen mode unskip. Alle Abfragen zwischen den beiden Anweisungen werden nicht ausgeführt.

Festlegen, welche Tests ausgeführt werden

Beim Ausführen des unittest-Programms werden standardmäßig alle schnellen Tests ausgeführt. Ein bestimmter Test lässt sich ausführen, indem Sie den Namen des Tests als Argument übergeben. Bei den sqllogictests ist das der relative Pfad zur Testdatei. Um nur einen einzelnen Test auszuführen:

Terminal window
build/debug/test/unittest test/sql/projection/test_simple_projection.test

Alle Tests in einem bestimmten Verzeichnis können ausgeführt werden, indem Sie das Verzeichnis als Parameter in eckigen Klammern angeben. Um alle Tests im Verzeichnis „projection“ auszuführen:

Terminal window
build/debug/test/unittest "[projection]"

Alle Tests, einschließlich der langsamen Tests, können ausgeführt werden, indem Sie die Tests mit einem Sternchen starten. Um alle Tests einschließlich der langsamen Tests auszuführen:

Terminal window
build/debug/test/unittest "*"

Eine Teilmenge der Tests können wir mit den Parametern --start-offset und --end-offset ausführen. Um die Tests 200…250 auszuführen:

Terminal window
build/debug/test/unittest --start-offset=200 --end-offset=250

Diese Parameter gibt es auch in Prozent. Um die Tests 10 % – 20 % auszuführen:

Terminal window
build/debug/test/unittest --start-offset-percentage=10 --end-offset-percentage=20

Die Menge der auszuführenden Tests kann auch aus einer Datei geladen werden, die einen Testnamen pro Zeile enthält, und mit dem Befehl -f geladen werden.

Terminal window
cat test.list
test/sql/join/full_outer/test_full_outer_join_issue_4252.test
test/sql/join/full_outer/full_outer_join_cache.test
test/sql/join/full_outer/test_full_outer_join.test

Um nur die in der Datei angegebenen Tests auszuführen:

Terminal window
build/debug/test/unittest -f test.list