在控制台中强制写入 Xcode 'Debugger Output'?

Force write to Xcode 'Debugger Output' in console?

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

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

看起来 Xcode 使用 tty 与 lldb 通信,您可以使用它与调试器输出接口:

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

分解以上内容:

$ ps -A | grep -m1 MacOS/Xcode | awk '{print }' 
21280

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

$ 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

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

$ lsof -p 21280 | grep /dev/ttys | tail -1 | awk '{print }'
/dev/ttys005

现在我们可以用它来写我们想要的任何东西了: