我收到此错误,是否需要使用特定语法在 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无法推断整个方法的返回类型,所以我也必须转换返回类型。
答案 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]