2016-02-23 4 views
9

Ich benutze lldb als eigenständiger Debugger in OSX. Ich versuche, eine ausführbare C-Datei zu debuggen, indem ich eine Textdatei als Eingabe benutze. Die LLDB Dokumentation zum Ändern stdin zu einer bestimmten Datei den folgenden Befehl angibt:Kann lldb nicht lesen, um Dateieingabe zu lesen

process launch -i <file> 

Mit diesem Befehl, LLDB scheint die angegebene Datei zu ignorieren, anstatt für die Tastatureingabe wartet.

Ist das beabsichtigte Verhalten? Wenn ja; Was muss ich tun, damit der Prozess tatsächlich mit meiner gewünschten Eingabedatei arbeitet?

tl; dr: Wie erhalte ich LLDB eine Standard-Terminal Ausführung wie zu imitieren:

./executable < <file> 
+0

Um zu verdeutlichen, ist Ihre Anwendung geschrieben, immer von Standard zu lesen? –

+0

@JonathonReinhart Ich nehme an, aber ich bin mir nicht ganz sicher. Das IO meines Programms ist in der von flex und bison generierten Quelle definiert. Ich rufe yyparse() an, welches wiederum yylex() aufruft, was die IO machen sollte. Die ausführbare Datei wurde jedoch außerhalb des Debuggers mit der Textdatei als stdin ausgeführt und verhält sich wie beabsichtigt. Es wurde folgendermaßen gemacht: ./executable outputfile.txt –

+0

'./executable infile.txt outfile.txt' bedeutet ** not ** bedeutet, dass das Programm von stdin liest. Tatsächlich impliziert es das Gegenteil - dass das Programm einen Dateinamen in der Befehlszeile erwartet. Sie müssen sich das 'int main' für Ihr Programm ansehen und es zuerst verstehen. –

Antwort

13

ich es wie folgt zu arbeiten habe:

lldb <executable> 
(lldb) settings set target.input-path <file> 
(lldb) process launch 

Es ist mein Problem löst, aber ich habe nicht wirklich eine Erklärung dafür, warum die Methode in meiner Frage nicht funktioniert.

+0

Das hat auch für mich funktioniert. Ich war auch nicht in der Lage, die "-i" -Option zum Funktionieren zu bringen, wie viele es als Lösung vorgeschlagen haben. – sherrellbc

Verwandte Themen