【发布时间】:2018-06-20 20:18:27
【问题描述】:
在整个项目中使用的全局头文件中使用枚举类型定义,在 Xcode 中使用 lldb 时,我无法按名称引用各个枚举值。
例如,如果我在枚举类型可用的任何地方的断点处停止,并且我尝试在 Xcode 中的 lldb 提示符处评估某些内容(例如(lldb) p (int)EnumConstant),lldb 会抱怨:
error: use of undeclared identifier 'EnumConstant'
此外,如果我尝试在条件中使用枚举常量设置条件断点(例如,在 Xcode 中右键单击断点 > 编辑断点... > 条件:EnumConstant == someLocalVar),那么 Xcode 每次尝试时都会抱怨在该断点处评估该条件:
Stopped due to an error evaluating condition of breakpoint 1.1: "EnumConstant == someLocalVar"
Couldn't parse conditional expression:
error: use of undeclared identifier 'EnumConstant'
当我开始在“编辑断点...”窗口中输入名称时,Xcode 的代码完成弹出框甚至解决了对枚举常量的建议,因此 Xcode 本身在解决它时没有问题。
我可以在 lldb 或 Xcode 中设置一个选项,以便 lldb 在编译后维护枚举标识符?我假设枚举常量在编译期间被转换为它们的序数值,导致可执行文件丢弃标识符,但这只是我天真的猜测。
当我在 Linux 或 Cygwin 中的简单 GNU C 程序中使用等效代码时(显然减去类定义),但使用 gcc/gdb 而不是 Xcode/lldb,我没有这些问题。它能够解决枚举值没有问题。
我创建了一个小型 Xcode iPhone 项目来说明我的意思。在ViewController.m 上下文中使用下面的任何enum_t 常量(for 循环是演示的好地方)都会产生相同的结果。
ViewController.h:
#import <UIKit/UIKit.h>
@interface ViewController : UIViewController
typedef enum
{
eZero, eOne, eTwo, eCOUNT
}
enum_t;
extern NSString const * const ENUM_STR[];
@end
ViewController.m:
#import "ViewController.h"
@implementation ViewController
NSString const * const ENUM_STR[eCOUNT] = { @"eZero", @"eOne", @"eTwo" };
- (void)viewDidLoad
{
[super viewDidLoad];
for (enum_t value = eZero; value < eCOUNT; ++value)
{
NSLog(@"%-8@ = %d", ENUM_STR[value], value);
}
}
@end
【问题讨论】:
标签: ios objective-c xcode enums lldb