2017-06-23 29 views
0

我想知道是否有可能在Xcode中获得C++枚举项的值。如何在Xcode中获得C++枚举值?

在Visual Studio中,您只需将鼠标悬停在该项目上,即可获得具有其值的工具提示,但它在Xcode中的功能不同。

我也尝试在lldb控制台中打印值,但没有成功。

比如这个简单枚举:

enum Params{ 
    eP1, 
    eP2, 
    eP3, 
    eP4, 
    eP5, 
}; 

我试着像p eP1p Param::eP1不同的方式。

我也试过enum class,结果相同。

回答

1

目前,你必须使用enumName:enumElement,但是这是为我工作:

> cat foo.cpp 
#include <stdio.h> 

enum Params 
    { 
    eP1, 
    eP2, 
    eP3, 
    eP4 
    }; 

int main() 
{ 
    enum Params elem = eP1; 
    printf ("%d\n", elem); 
    return 0; 
} 
> lldb a.out 
(lldb) target create "a.out" 
Current executable set to 'a.out' (x86_64). 
(lldb) b s -p printf 
Breakpoint 1: where = a.out`main + 29 at foo.cpp:14, address = 0x0000000100000f6d 
(lldb) run 
Process 26752 launched: '/private/tmp/a.out' (x86_64) 
Process 26752 stopped 
* thread #1, queue = 'com.apple.main-thread', stop reason = breakpoint 1.1 
    frame #0: 0x0000000100000f6d a.out`main at foo.cpp:14 
    11 int main() 
    12 { 
    13  enum Params elem = eP1; 
-> 14  printf ("%d\n", elem); 
         ^
    15  return 0; 
    16 } 
Target 0: (a.out) stopped. 
(lldb) expr Params::eP1 
(int) $0 = 0 

如果仍然不能得到这个工作,你可以发布更完整的示例,其中失败?

lldb,BTW的问题在于,调试信息被组织到完整的调试信息中,然后是名称 - >信息加速器表。 lldb取决于查找的加速器表(否则它将不得不查看所有调试信息,对于大型应用程序可能会非常慢)。目前的加速器表格只有枚举的名称,而不是元素名称。

+0

谢谢你的回答。在比较你的例子和我的例子之后,你似乎需要在范围中实例化一个枚举元素来使其工作。 –

+0

是的,这是预期的行为。一些编译器(确定gcc和clang) - 为了减少调试信息的大小 - 不会发出“未使用类型”的调试信息。在大多数“真实”的应用程序中,这不是一个问题:你通常不会有那么多种类型的人使用。但是当你在一个小玩具程序中尝试某些东西时,你通常需要做一些额外的工作来确保类型被认为是“被使用”的。 –