2016-02-23 21 views
9

Używam lldb jako samodzielnego debuggera w systemie OSX. Próbuję debugować plik wykonywalny C, używając pliku tekstowego jako danych wejściowych. Dokumentacja lldb określa następujące polecenie do zmiany stdin do danego pliku:Nie można uzyskać lldb do odczytu pliku wejściowego

process launch -i <file> 

użyciu tej komendy, lldb zdaje się ignorować określony plik, zamiast czekania na dane z klawiatury.

Czy to zamierzone zachowanie? W takim razie; co muszę zrobić, aby proces obsługi mógł działać na żądanym pliku wejściowym?

tl; dr: Jak mogę dostać lldb naśladować standardowej wykonanie terminala np:

./executable < <file> 
+0

Aby wyjaśnić, twoja aplikacja jest napisana tak, aby zawsze czytać ze standardowego wejścia? –

+0

@ Jonathon Reinhart Zakładam, że tak, ale nie jestem do końca pewien. Program IO mojego programu jest zdefiniowany w źródle generowanym przez flex i bison. Wzywam yyparse(), która z kolei wywołuje yylex(), która powinna wykonać IO. Plik wykonywalny został jednak uruchomiony poza debuggerem z plikiem tekstowym jako stdin i zachowywał się zgodnie z przeznaczeniem. Wykonano to w następujący sposób: ./executable plik_wyjściowy.txt –

+0

'./powinalny plik infile.txt plik_zewarty.txt ma wartość ** nie ** oznacza, że ​​program czyta ze standardowego wejścia. W rzeczywistości oznacza to coś przeciwnego - program oczekuje nazwy pliku w linii poleceń. Musisz przyjrzeć się 'int main' dla twojego programu i najpierw go zrozumieć. –

Odpowiedz

13

mam go do pracy w następujący sposób:

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

To rozwiązuje mój problem, ale ja tak naprawdę nie ma wyjaśnienia, dlaczego metoda w moim pytaniu nie działa.

+0

To również zadziałało dla mnie. Nie mogłem również uruchomić opcji '-i', ponieważ wiele osób zaproponowało rozwiązanie. – sherrellbc

Powiązane problemy