无法通过重定向让lldb读取文件输入

26

我在OSX上使用lldb作为独立的调试器。我正在尝试通过重定向来使用文本文件作为输入来调试一个C可执行文件。 lldb文档指定了以下命令来将stdin更改为给定的文件:

process launch -i <file>

使用这个命令,lldb似乎忽略了指定的文件,而是等待键盘输入。

这是预期的行为吗?如果是,请问我需要怎么做才能让进程操作我想要的输入文件?

tl;dr:我如何让lldb模拟像这样的标准终端执行与重定向:

./executable < <file>

请澄清一下,您的应用程序是编写为始终从标准输入读取吗? - Jonathon Reinhart
@JonathonReinhart 我想是这样,但我不是完全确定。我的程序IO是由flex和bison生成的源代码定义的。我调用yyparse(),它又调用yylex(),应该处理IO。然而,可执行文件已经在没有调试器的情况下使用文本文件作为stdin运行,并且表现如预期。操作步骤如下:./executable <inputfile.txt> outputfile.txt - Harald Husum
"./executable infile.txt outfile.txt" 并不意味着程序正在从 stdin 中读取输入。实际上,它意味着相反的情况 - 程序期望在命令行上获得一个文件名。你需要先查看程序的 "int main" 并理解它。 - Jonathon Reinhart
@HaraldHusum 我认为他误解了<inputfile.txt>,将其视为占位符而不是字面的shell语法。你的程序确实是从stdin读取的。 - zwol
@zwol 哈,是的,你说得对。是的,你的程序正在从stdin读取。抱歉打扰了。 - Jonathon Reinhart
显示剩余2条评论
1个回答

49

我按照以下方式使其工作:

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

它解决了我的问题,但我确实没有一个解释为什么我提出的方法不起作用


这对我也起作用了。我也无法像许多人提出的解决方案那样使用“-i”选项。 - sherrellbc
要使用参数运行<可执行文件>,请使用run -arg1 -arg2而不是process launch - AlienKevin
@AlienKevin,不过那不是问题的关键。 - Harald Husum
@HaraldHusum 我认为使用文件输入和参数运行可执行文件是一个相对常见的情况。我个人也遇到过这个问题,只是想让其他人知道如何在文件重定向后传递这些参数。 - AlienKevin
@AlienKevin 噢,好的。以为你是在建议它作为解决方案。那就没关系了。 - Harald Husum

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接