如何在 lldb 中使用枚举
How to use enum in 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 无法推断出整个方法的 return 类型,所以我不得不转换 return 类型还有。
NSUTF8StringEncoding
来自 NSUInteger 枚举,它等于 4:
typedef NSUInteger NSStringEncoding;
...
NSUTF8StringEncoding = 4,
所以对于 lldb 命令,您可以像这样传递 smth:
(lldb) po [[NSString alloc] initWithData:$data encoding:4]
参考这个nice blog关于使用lldb
调试器命令。
您的解决方案是像这样直接传递 NSUTF8StringEncoding
的枚举值:
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 上设置一个符号断点,使用此调试器命令添加一个 "action",并设置它会自动继续。
一旦该功能在野外有更多的时间,我们可能会自动执行此操作。
我遇到了这个错误,我需要使用特定的语法才能在 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 无法推断出整个方法的 return 类型,所以我不得不转换 return 类型还有。
NSUTF8StringEncoding
来自 NSUInteger 枚举,它等于 4:
typedef NSUInteger NSStringEncoding;
...
NSUTF8StringEncoding = 4,
所以对于 lldb 命令,您可以像这样传递 smth:
(lldb) po [[NSString alloc] initWithData:$data encoding:4]
参考这个nice blog关于使用lldb
调试器命令。
您的解决方案是像这样直接传递 NSUTF8StringEncoding
的枚举值:
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 上设置一个符号断点,使用此调试器命令添加一个 "action",并设置它会自动继续。
一旦该功能在野外有更多的时间,我们可能会自动执行此操作。