在控制台中强制写入 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
现在我们可以用它来写我们想要的任何东西了:
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
现在我们可以用它来写我们想要的任何东西了: