ios - 如何在 lldb 中使用枚举

标签 ios objective-c lldb

我遇到了这个错误,我需要使用特定的语法才能在 LLDB 中使用 enum 吗?

(lldb) expr NSString *$text = [[NSString alloc] initWithData:$data encoding:NSUTF8StringEncoding]
error: use of undeclared identifier 'NSUTF8StringEncoding'
error: 1 errors parsing expression

注意:数据在我的上下文中有效且类型正确

在使用实际而不是我得到的枚举时进行编辑

expr NSString *$text = [[NSString alloc] initWithData:$data encoding:(NSStringEncoding)4]
error: no known method '-initWithData:encoding:'; cast the message send to the method's return type
error: 1 errors parsing expression

我试过有和没有强制转换为 (NSStringEncoding)

使用值的解决方案

expr NSString *$text = (NSString *)[[NSString alloc] initWithData:$data encoding:4]

由于我使用的是 -initWithData:encoding:(使用 NSUInteger 类型进行编码)lldb 无法推断出整个方法的返回类型,所以我也必须强制转换返回类型。

最佳答案

枚举的调试信息与 lldb 的符号搜索模式不匹配,如果未指定枚举名称,则搜索特定枚举值的成本会非常高。目前,如果其他一些操作没有导致枚举调试信息被引入,lldb 将找不到它。不幸的是,NSStringEncoding 枚举是一个匿名枚举,因此无法通过 name::value 指定值。

但是,如果您使用的是 Xcode 7.x,则可以将基础模块导入 lldb 用于表达式解析的编译器:

(lldb) expr @import Foundation

然后 lldb 将找到这个枚举值(以及许多其他东西,例如宏和更准确的方法类型。)

请注意,如果您发现这很有用并且您使用的是 Xcode,则可以通过在 main 上设置符号断点、使用此调试器命令添加“操作”并将其设置为自动继续来自动执行此操作。

一旦该功能在野外有更多的时间,我们可能会自动执行此操作。

关于ios - 如何在 lldb 中使用枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33146931/

相关文章:

ios - 应用程序崩溃,但没有设备日志

ios - 使用 lldb 呈现 ViewController

javascript - 在 iOS 中将字符串传递给 JavaScript 无法获取调用的函数

ios - 如何使用自动布局将一个 UIView 定位在其他两个 UIView 的中心?

ios - 自动布局确定 subview 的大小

clang - Windows 上的 lldb,可能吗?

ios - 通过在 lldb 中添加 borderColor 来调试 View

ios - Clang 警告,-Wimplicit-fallthrough,不触发我在 Xcode 中的大部分文件

ios - 为具有圆角的 UIImageView 创建阴影?

iOS:快速滚动照片时出错?