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

Debugging 如何通过管道将命令stdout传递给lldb调试文件stdin,debugging,redirect,pipe,stdin,lldb,Debugging,Redirect,Pipe,Stdin,Lldb,我想运行一个可执行文件,通过管道将它的标准输出重定向到我的程序,然后LLDB调试我的程序。 例如: cat my_file | ./main 然后调试。/main。 我知道进程启动-我知道我的_文件,但这并不完全是我想要做的-我希望输出来自cat的stdout(它可以是任何其他可执行文件-我不会实现类似的行为)。 我在帮助流程启动下看不到相关选项 这不是lldb支持的选项。通过运行以下命令,您可以获得几乎相同的效果: (lldb)工艺连接-w-n主管道 然后转到命令行并运行cat |/main

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

cat my_file | ./main
然后调试。/main。 我知道
进程启动-我知道我的_文件
,但这并不完全是我想要做的-我希望输出来自cat的stdout(它可以是任何其他可执行文件-我不会实现类似的行为)。
我在
帮助流程启动
下看不到相关选项

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

(lldb)工艺连接-w-n主管道

然后转到命令行并运行
cat |/main
命令

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

int go_on = 1
while (go_on) { sleep(1); }
然后,连接时,请执行以下操作:

(lldb) expr go_on = 0
(lldb) continue

对于仍希望将shell命令输出作为参数传递给lldb的用户

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

在你的例子中,你会按照这些思路做一些事情

ARG=`cat my_文件`

(echo$ARG验证结果是否符合您的要求)


lldb--main$ARG

太糟糕了,它不受支持。这是一个很酷的解决方案!我可以玩它,这通常是足够的没有睡眠,特别是与沉重的设置程序。如果是在加载阶段,就更好了。谢谢你的建议:)