【问题标题】:How to get c++ enum value in Xcode?如何在 Xcode 中获取 c++ 枚举值?
【发布时间】:2017-06-23 09:27:15
【问题描述】:

我想知道这是否可以在 Xcode 中获取 c++ 枚举项的值。

在 Visual Studio 中,您只需将鼠标悬停在项目上,您就会得到一个带有其值的工具提示,但在 Xcode 中却不一样。

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

以这个简单的枚举为例:

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

我尝试了不同的方法,例如 p eP1p Param::eP1

我也尝试了enum class,结果相同。

【问题讨论】:

    标签: xcode enums lldb


    【解决方案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 的问题在于,调试信息被组织成完整的调试信息,然后是名称->信息加速表。 lldb 依赖于加速器表进行查找(否则它必须查看所有调试信息,这对于大型应用程序来说可能会变得非常慢)。目前的快捷键表只有枚举名,没有元素名。

    【讨论】:

    • 感谢您的回答。在将您的示例与我的示例进行比较之后,您似乎需要在范围内实例化枚举的一个元素才能使其工作。
    • 是的,这是预期的行为。一些编译器(肯定是 gcc 和 clang)——为了减少调试信息的大小——不会为“未使用的类型”发出调试信息。在大多数“真实”应用程序中,这不是问题:您通常不会有那么多没有人使用的类型。但是,当您在一个小玩具程序中试验某些东西时,您通常需要做一些额外的工作以确保该类型被视为“已使用”。
    猜你喜欢
    • 1970-01-01
    • 2010-11-03
    • 2011-09-06
    • 1970-01-01
    • 2013-05-04
    • 1970-01-01
    • 2014-02-02
    • 2011-07-07
    • 1970-01-01
    相关资源
    最近更新 更多