LLDB expr print命令在NotificationServiceExtension进程无输出求助
LLDB在NotificationServiceExtension中无法输出print内容的解决办法
问题根源
NotificationServiceExtension这类App扩展进程默认没有关联Xcode调试控制台的标准输出流,所以expr print()的内容不会显示在Xcode控制台;而主应用进程默认已完成关联,因此能正常输出。
解决方法
方法一:用LLDB原生po命令替代expr print()
po(Print Object)是LLDB专门用来输出对象内容的命令,它不依赖进程的标准输出,直接将结果输出到LLDB控制台。
- 测试基础输出:直接执行
po "foo"就能看到预期的字符串输出。 - 修改你的自定义命令:将原命令里的
expr print()替换为po,命令如下:
之后执行command regex poj 's/(.+)/po NSString(string: String(data: try! JSONSerialization.data(withJSONObject: %1, options: [.prettyPrinted, .sortedKeys]), encoding: .utf8)!)/'poj <payload变量名>就能直接在控制台看到格式化后的APNS payload内容。
方法二:手动重定向扩展进程的标准输出(不推荐)
如果一定要使用expr print(),可以通过LLDB命令将进程的stdout/stderr重定向到终端:
- 在终端执行
tty命令,获取当前终端的设备路径(比如/dev/ttys001)。 - 在Extension进程的断点处执行以下LLDB命令:
expr freopen("/dev/ttys001", "a+", stdout) expr freopen("/dev/ttys001", "a+", stderr) - 此时再执行
expr print("foo"),输出内容会显示在你刚才的终端窗口(而非Xcode控制台)。
内容的提问来源于stack exchange,提问作者Konstantinos Nikoloutsos
相关产品推荐
相关产品推荐

