如何在lldb

时间:2015-10-15 11:08:59

标签: ios objective-c lldb

我收到此错误,是否需要使用特定语法在 LLDB 中使用枚举

(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无法推断整个方法的返回类型,所以我也必须转换返回类型。

3 个答案:

答案 0 :(得分:4)

枚举的调试信息和lldb搜索符号的模式之间存在不匹配,如果未指定枚举名,则搜索特定枚举值会非常昂贵。目前,如果某些其他操作没有导致枚举调试信息被引入,lldb将找不到它。遗憾的是,NSStringEncoding枚举是一个匿名枚举,因此无法通过name :: value指定值。

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

(lldb) expr @import Foundation

然后lldb将找到此枚举值(以及许多其他内容,如宏和更准确的方法类型。)

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

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

答案 1 :(得分:1)

NSUTF8StringEncoding来自NSUInteger枚举,它等于4:

typedef NSUInteger NSStringEncoding;
...
 NSUTF8StringEncoding = 4,

所以对于lldb命令,你可以像这样传递smth:

(lldb) po [[NSString alloc] initWithData:$data encoding:4]

答案 2 :(得分:1)

使用lldb调试器命令,请参阅此nice blog

您的解决方案是直接传递NSUTF8StringEncoding的枚举值,如下所示:

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