gpt4 book ai didi

ios - 如何使用 Swift 在 LLDB 控制台中使用 _printHierarchy?

转载 作者:IT王子 更新时间:2023-10-29 05:10:45 26 4
gpt4 key购买 nike

Apple 添加了一个 private helper _printHierarchy in iOS8可以在 LLDB 控制台中使用:

po [[[UIWindow keyWindow] rootViewController] _printHierarchy]

以文本形式打印出整个 View Controller 层次结构。

这仅在您在 Objective C 上调试代码时有效。然而,在 Swift 中,这不起作用:

(lldb) po [[[UIWindow keyWindow] rootViewController] _printHierarchy]
error: <EXPR>:1:13: error: expected ',' separator
[[[UIWindow keyWindow] rootViewController] _printHierarchy]
^
,
<EXPR>:1:24: error: expected ',' separator
[[[UIWindow keyWindow] rootViewController] _printHierarchy]
^
,
<EXPR>:1:44: error: expected ',' separator
[[[UIWindow keyWindow] rootViewController] _printHierarchy]
^
,

Swift 中的等效用法也不起作用:

po UIApplication.sharedApplication().keyWindow!.rootViewController!._printHierarchy

以错误结束(可能是因为 _printHierarchy 是私有(private)属性):

(lldb) po UIApplication.sharedApplication().keyWindow!.rootViewController!._printHierarchy()
error: <EXPR>:1:64: error: 'UIViewController' does not have a member named '_printHierarchy'
UIApplication.sharedApplication().keyWindow!.rootViewController!._printHierarchy
^ ~~~~~~~~~~~~~~~

问题是:如何在 Swift 中打印出 View Controller 层次结构?或者有没有办法在 LLDB 控制台中甚至在 Swift 项目中使用 ObjC?

最佳答案

您指出如何显示 View Controller 层次结构:

po [[[UIWindow keyWindow] rootViewController] _printHierarchy]

然后你说:

This works only if you are debugging code on Objective C. In Swift, however, this doesn't work.

实际上,这在一定程度上取决于您暂停 Swift 程序执行的方式。问题在于 expression 命令(po 使用)将在 Swift 框架中使用 Swift 表达式,在 Objective-C 框架中使用 Objective-C 表达式。因此,这意味着 po 行为会根据执行暂停的方式而变化:

  • 例如,您可以在应用程序运行时按“暂停”按钮:

    pause

    如果这样做,您将能够毫无意外地将上述 po 语法与 Objective-C 表达式一起使用。

  • 另一方面,如果您在 Swift 代码中设置断点,则当您到达 (lldb) 提示符时,您将处于 Swift 框架中。但是您可以通过 -l(或 --language)选项明确告诉 expression 命令您想要使用 Objective-C 语法:

    expr -l objc++ -O -- [[[UIWindow keyWindow] rootViewController] _printHierarchy]

在 WWDC 2014 视频 Advanced Swift Debugging in LLDB 中讨论了这种在 expr 命令中指定语言的能力.

关于ios - 如何使用 Swift 在 LLDB 控制台中使用 _printHierarchy?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27966453/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com