在控制台中强制写入 Xcode“调试器输出”?

Tre*_*res 2 xcode objective-c lldb swift xcode11

Xcode 控制台有一个“调试器输出”过滤器。我知道这是与 一起使用的lldb,并且您可以使用断点将消息打印到此输出。我的问题不是如何做到这一点。

我的问题是:Xcode本身用于将lldb消息写入调试器输出而不是目标输出)的底层机制是什么?stdout有没有类似或者stderr写在这里的变量?是否可以从 Xcode 目标代码 (Swift/Obj-C/C) 写入此输出?

Tre*_*res 7

看起来 Xcode 使用 tty 与 lldb 进行通信,您可以使用以下方式与调试器输出进行交互:

echo "Wheeeeeeee" > $(lsof -p $(ps -A | grep -m1 MacOS/Xcode | awk '{print $1}') | grep -m2 dev/ttys | tail -1 | awk '{print $9}')

分解上面的内容:

$ ps -A | grep -m1 MacOS/Xcode | awk '{print $1}' 
21280
Run Code Online (Sandbox Code Playgroud)

这给出了 Xcode 的进程 ID (21280)。使用它,我们可以找到它打开的文件:

$ lsof -p 21280 | grep /dev/ttys
Xcode   21280 tres   47u      CHR               16,3       0t0                3569 /dev/ttys003
Xcode   21280 tres   58u      CHR               16,5       0t0                3575 /dev/ttys005
Run Code Online (Sandbox Code Playgroud)

数字最大的那个(/dev/ttys005在本例中)就是我们想要的,所以让我们提取它。tail -1将为我们提供最后一行输出,并将awk '{print $9}'为我们提供该行的第 9 项,这就是我们想要的!

$ lsof -p 21280 | grep /dev/ttys | tail -1 | awk '{print $9}'
/dev/ttys005
Run Code Online (Sandbox Code Playgroud)

现在我们可以用它来写我们想要的任何内容:

在此输入图像描述