debugging - 如何通过管道将命令标准输出传递给 lldb 调试文件标准输入

标签 debugging redirect pipe stdin lldb

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

cat my_file | ./main

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

最佳答案

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

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

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

lldb 在创建时将附加到名为 main 的进程。 lldb 通过轮询进程表来执行此操作,因此它不会在程序生命周期的一开始就停止。然而,它通常很早就捕获它(通常在 dyld 加载阶段)所以这对你来说可能不是问题。如果是 - 并且 main 是一个您可以重建的程序,一个解决方案是在 main 的开头放置类似这样的内容:

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

然后当你附加时,做:

(lldb) expr go_on = 0
(lldb) continue

关于debugging - 如何通过管道将命令标准输出传递给 lldb 调试文件标准输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53817204/

相关文章:

file - .htaccess |您是否必须在每个目录中为每个错误安装htaccess,还是在根目录中仅安装一个?

java - 如何通知 PipedInputStream 线程 PipedOutputStream 线程已写入最后一个字节?

c - 叔叔和侄子之间的管道

c - 我错误地使用了 close() 吗?

python - 为什么我的 python 代码在调试器中按预期运行而不是其他方式?

ios - 捕获 iOS 应用程序中的调试信息

php - Laravel 5 - post 路由上的 htaccess HTTPS 重定向不起作用。

ios - 在 Windows 上调试 iOS Safari html 布局

c - C中的#error指令。如何显示一些#define

jq 输出的重定向