Frage

Ich versuche, Tests zu schreiben, dass interact mit GDB aber Probleme habe die Ausgabe zu erfassen. Ich möchte für eine Protokolldatei erzeugt werden, das aussieht wie das, was in einem Terminal gesehen hätte hatte den Test von Hand ausgeführt worden ist. GDB erweist sich als sehr hartnäckig sein, wenn es jedoch um die Erfassung seiner Ausgabe kommt.

Ich habe in der Lage Expect-Skripte zu schreiben, die in der Lage sind mit GDB zu interagieren und dessen Ausgang kann in eine Log-Datei umgeleitet werden, aber ich will nicht meine Tests in TCL schreiben. Ich hoffe, Groovy zu verwenden, die mit Java kompatibel ist. Aus irgendeinem Grund mit Perl erwarten und ExpectJ das Programm Ausgabe geht immer an das Endgerät und kann nicht in eine Datei umgeleitet werden.

Ich habe versucht, einen GDB Prozess von Java unter Verwendung von Process starten und es funktioniert meistens aber die Ausgabe von Druckanweisungen nie auf stdout erscheinen und nicht erfaßt werden kann. Ich dachte, wenn Expect funktioniert, dann würde ich starten von Java erwarten und haben es interact mit GDB aber in diesem Fall die meisten der Programmausgabe verloren, nie in den stdout des erzeugten Prozesses erscheinen.

Also meine Frage ist, wie kann ich schreibe einen Test in Groovy (Java fein wie gut sein würde), die interagiert mit GDB und kann die gesamte Ausgabe erfassen?

Pseudo-Code:

process = "gdb -q".execute()
waitForPrompt()
send("file exec")
waitForPrompt()
send("run")
send("quit")

Log-Datei:

(gdb) file exec
Reading symbols from exec...done.
(gdb) run
Starting program: exec
<... output ...>

Program exited normally.
(gdb) quit
War es hilfreich?

Lösung

Eine Möglichkeit besteht darin, dass die GDB Ausgabe auf Standardfehler ausgegeben wird, und Sie erfassen nur die Standardausgabe. Sie sollten mit einer Umleitung um dieses Problem beheben können, so etwas wie dies denke ich:

 process = "gdb -q 2&>1".execute()

Eine zweite Vermutung ist, dass es sich lohnt Prüfung sein kann, was „interactive-Modus zeigen“, sagt in der Arbeits- und Nichtarbeits Fällen. Wenn sie versuchen, unterscheiden sich „gesetzt interaktiven-Modus aus“, bevor Sie irgendetwas anderes tun.

Eine dritte Option ist GDB Protokollfunktion verwenden, um die Protokolldatei ( „set-Logging-Datei“ und „set logging on“) und vermeiden Sie zu schreiben, die die Ausgabe selbst zu erfassen.

Andere Tipps

Wenn Ihr Test mit gdb tatsächlich Debug etwas beinhaltet, im Gegensatz zu gdb Prüfung selbst, sollten Sie vielleicht die GDB / mi Schnittstelle prüfen verwendet wird.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top