目前,你必须使用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取决于查找的加速器表(否则它将不得不查看所有调试信息,对于大型应用程序可能会非常慢)。目前的加速器表格只有枚举的名称,而不是元素名称。
谢谢你的回答。在比较你的例子和我的例子之后,你似乎需要在范围中实例化一个枚举元素来使其工作。 –
是的,这是预期的行为。一些编译器(确定gcc和clang) - 为了减少调试信息的大小 - 不会发出“未使用类型”的调试信息。在大多数“真实”的应用程序中,这不是一个问题:你通常不会有那么多种类型的人使用。但是当你在一个小玩具程序中尝试某些东西时,你通常需要做一些额外的工作来确保类型被认为是“被使用”的。 –