2016-02-23 14 views
9

Tôi đang sử dụng lldb làm trình gỡ lỗi độc lập trong OSX. Tôi đang cố gắng để gỡ lỗi một C thực thi, bằng cách sử dụng một tập tin văn bản như đầu vào. Tài liệu lldb chỉ định lệnh sau đây để thay đổi stdin thành một tệp nhất định:Không thể nhận lldb để đọc tệp nhập

process launch -i <file> 

Sử dụng lệnh này, lldb dường như bỏ qua tệp được chỉ định, thay vì chờ nhập bàn phím.

Hành vi này có dự định không? Nếu vậy; Tôi cần phải làm gì để thực sự có được quy trình hoạt động trên tệp đầu vào mong muốn của mình?

tl; dr: Làm thế nào để tôi nhận được LLĐB để bắt chước một hành thiết bị đầu cuối tiêu chuẩn như:

./executable < <file> 
+0

Để làm rõ, đơn đăng ký của bạn được viết để luôn đọc từ stdin? –

+0

@JonathonReinhart Tôi giả sử như vậy, nhưng tôi không hoàn toàn chắc chắn. IO chương trình của tôi được định nghĩa trong nguồn được tạo ra bởi flex và bison. Tôi gọi yyparse() mà lần lượt gọi yylex(), mà nên làm IO. Tuy nhiên, tệp thực thi đã được chạy bên ngoài trình gỡ rối với tệp văn bản là stdin và được xử lý như dự định. Nó được thực hiện như sau: ./executable outputfile.txt –

+0

'./executable infile.txt outfile.txt' không ** không ** có nghĩa là chương trình đang đọc từ stdin. Trong thực tế, nó ngụ ý ngược lại - rằng chương trình đang mong đợi một tên tập tin trên dòng lệnh. Bạn cần phải nhìn vào 'int main' cho chương trình của bạn và hiểu nó trước tiên. –

Trả lời

13

tôi đã nhận nó làm việc như sau:

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

Nó giải quyết vấn đề của tôi, nhưng tôi không thực sự giải thích lý do tại sao phương thức trong câu hỏi của tôi không hoạt động.

+0

Điều này cũng làm việc cho tôi. Tôi cũng không thể có được tùy chọn '-i' để làm việc như nhiều người đã đưa ra như là giải pháp. – sherrellbc

Các vấn đề liên quan