Ios 如何在lldb中使用enum

Ios 如何在lldb中使用enum,ios,objective-c,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 注意:数据在我的上下文中有效,并且类型正确 使用实际值

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

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

typedef NSUInteger NSStringEncoding;
...
 NSUTF8StringEncoding = 4,
因此,对于lldb命令,您可以像这样传递smth:

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

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

typedef NSUInteger NSStringEncoding;
...
 NSUTF8StringEncoding = 4,
因此,对于lldb命令,您可以像这样传递smth:

(lldb) po [[NSString alloc] initWithData:$data encoding:4]
expr NSString *$text = (NSString *)[[NSString alloc] initWithData:data encoding:4]
有关使用
lldb
debugger命令的信息,请参阅

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

(lldb) po [[NSString alloc] initWithData:$data encoding:4]
expr NSString *$text = (NSString *)[[NSString alloc] initWithData:data encoding:4]
有关使用
lldb
debugger命令的信息,请参阅

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

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

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

如果使用XCODE 7 .x,则可以将基础模块导入到编译器LLDB中,用于表达式解析:

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

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


一旦该功能在野外运行了一段时间,我们可能会自动执行此操作。

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

如果使用XCODE 7 .x,则可以将基础模块导入到编译器LLDB中,用于表达式解析:

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

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


一旦该功能在野外运行了一段时间,我们可能会自动执行此操作。

感谢我刚才给出的答案,是否有一种方法可以直接使用枚举而不是它的值?我不这么认为。尽管如此,我还是希望看到这样的选择
expr NSString*$text=[[NSString alloc]initWithData:$data encoding:(NSUInteger)4]错误:没有已知的方法“-initWithData:encoding:”;将消息发送到方法的返回类型错误:1错误解析表达式
您也得到了吗?试试这个
expr NSString*$text=(NSString*)[[NSString alloc]initWithData:data encoding:(nsInteger)4]
。很好,它可以工作,lldb实际上在抱怨整个函数的返回类型,谢谢@abhinav谢谢你的回答,我刚刚计算出了这个问题,有没有一种方法可以直接使用枚举而不是它的值呢?我不这么认为。尽管如此,我还是希望看到这样的选择
expr NSString*$text=[[NSString alloc]initWithData:$data encoding:(NSUInteger)4]错误:没有已知的方法“-initWithData:encoding:”;将消息发送到方法的返回类型错误:1错误解析表达式
您也得到了吗?试试这个
expr NSString*$text=(NSString*)[[NSString alloc]initWithData:data encoding:(nsInteger)4]
。很好,它可以工作,lldb实际上在抱怨整个函数的返回类型,谢谢@abhinav谢谢你的回答我刚刚想到了这个问题,有没有办法直接使用枚举而不是它的值?谢谢你的回答我刚刚想到了这个问题,有没有办法直接使用枚举而不是它的值?太棒了!谢谢你的详细解释和提示。太棒了!感谢您的详细解释和提示。