如何在 Xcode 中调试内部类

Posted

技术标签:

【中文标题】如何在 Xcode 中调试内部类【英文标题】:How to debug inside classes in Xcode 【发布时间】:2014-01-08 00:41:01 【问题描述】:

我正在使用 Xcode 5.0.2 调试一个简单的应用程序。当我尝试检查类的内容时,调试器似乎不知道如何显示该类。

例如,我有一个 CBService 类型的变量。 Xcode 在 Local Variables 窗口中的变量右侧正确显示类名。但是,当我单击变量名称旁边的显示三角形时,变量会展开并显示“NSObject”。最终是这样的。但这根本没有帮助。但是 Xcode 不会显示类的属性。这使得调试成为一个问题,因为我必须在没有我的类如何存储的模板的情况下查看内存。

我希望 Xcode 了解该类并显示其属性。许多较小的调试器可以做到这一点。

我已经包含了 CoreBluetooth 框架。

有谁知道是否/如何做到这一点?

【问题讨论】:

Ummm 你不是在找头文件吗? developer.apple.com/library/ios/documentation/CoreBluetooth/… 没有。我希望在不进行内存转储和计数字节的情况下检查类中变量的内容。我没有明确导入 CBService.h。但是,如果我为目标链接 CoreBluetooth.framework,这还不够吗? 【参考方案1】:

如果您想获取属性的值,那么您只需将它们打印出来。例如

(lldb) po peripheral.name

如果您想了解更多细节,那么您最好的猜测是description

(lldb) po service
<CBMutableService: 0x155578d0 Primary = YES, UUID = Human Interface Device, 
Included Services = (null), Characteristics = ("<CBMutableCharacteristic: 
0x15687af0 UUID = Unknown (<08590f7e db05467e 875772f6 faeb13d4>), Value = 
(null), Properties = 0x18, Permissions = 0x3, Descriptors = (null),
SubscribedCentrals = (\n)>"
)>

Apple 框架是封闭源代码。与许多其他框架中的类不同,Core Bluetooth 类没有声明您希望看到的公共 ivars。您可能故意无法轻松检查这些数据。我确信有这样做的做法,但在大多数情况下,上述方法至少对我很有效。

【讨论】:

不幸的是,没有。我不是在寻找源代码。我没问题。我正在寻找 Xcode 根据其头文件定义显示数据结构的内容。显示内存转储是无用的,因为我看不到第三个属性是什么。基本上,我正在寻找一种更好的方法来查看调试器中的变量。感谢您的帮助。 它不是最理想的,但我会接受它。感谢您的帮助。

以上是关于如何在 Xcode 中调试内部类的主要内容,如果未能解决你的问题,请参考以下文章

Tensorflow+kerasKeras 用Class类封装的模型如何调试call子函数的模型内部变量

Tensorflow+kerasKeras 用Class类封装的模型如何调试call子函数的模型内部变量

Xcode 10.2:调试应用程序时出现内部错误

使用Xcode调试FFmpeg内部代码

使用Xcode调试FFmpeg内部代码

用JAVASSIST如何得到一个类中所有的内部类(inner class)?