如何通过管道将命令stdout传递到lldb调试文件stdin

时间:2018-12-17 14:24:04

标签: debugging redirect pipe stdin lldb

我想运行一个可执行文件,通过管道将其标准输出重定向到我的程序,然后LLDB调试我的程序。 因此,例如:

cat my_file | ./main

,然后调试./main。 我知道process launch -i my_file,但这并不是我想要做的-我希望输出来自cat的stdout(它可以是-i无法实现类似行为的任何其他可执行文件)。 我在help process launch下看不到任何相关选项。

2 个答案:

答案 0 :(得分:1)

lldb不支持该选项。您可以通过运行以下命令获得几乎相同的效果:

(lldb)进程附加-w -n主

然后转到命令行并运行List1命令。

lldb在创建时将附加到名为main的进程。 lldb通过轮询进程表来做到这一点,因此它不会在程序生命的一开始就停止。但是,它通常很早就被捕获(通常在dyld加载阶段),因此这对您来说可能不是问题。如果它是-并且main是可以重建的程序,则一种解决方案是在main的开头放置如下内容:

cat | ./main

然后在附加时执行:

int go_on = 1
while (go_on) { sleep(1); }

答案 1 :(得分:1)

对于那些仍希望将shell命令输出作为参数传递给lldb的人。

您可以尝试的一种解决方案是使用命令的结果创建环境变量,然后将其作为参数传递给lldb。 lldb运行时,它将设置从环境变量获取的target.run-args选项。

在您的示例中,您将按照这些原则进行操作。

ARG =`cat my_file`

(回显$ ARG以验证结果是否是您想要的)

lldb-主$ ARG