2016-02-10 52 views
2

我无法查看我定义的结构的所有typedefs。特别是,如果没有使用typedef,当打印类型时,gdb不会显示它。这里有一个例子:gdb:查看未使用的结构typedef

struct D 
{ 
    typedef double dtype; 
    typedef int itype; 
}; 

int main(int /*argc*/, char** /*argv*/) 
{ 
    D::dtype t; 

    t = 2; 
    return 0; 
} 

当我运行GDB,我然后键入ptype D,但我只得到以下

(gdb) ptype D 
type = struct D { 
    typedef double dtype; 
} 
(gdb) 

有没有办法打印所有的typedef,即使不使用他们? 其他信息:

  1. 我已经set print type typedefs on
  2. 我编译与调试符号:g++ -g -o test main.cpp
  3. gdb的版本是7.10
  4. gcc版本是5.3
+0

为什么除了[С++]之外,这个标记为[С]?这似乎是一个C++特定的问题。 – AnT

+0

那么,typedef关键字也存在于C中,不是吗? – bartgol

+1

是的,但不能将typedefs嵌入到C中的结构中。这个问题在C中不存在。 – AnT

回答

2

GCC默认省略未使用的类型从调试信息。如果您确实需要此类型出现在调试信息中,请使用-fno-eliminate-unused-debug-types。但是,正如手册所警告的那样,这会膨胀产生的调试信息。

+0

是的!谢谢,这工作!你说得对,这应该是一个极端的解决方案。在实际代码中(不是我发布的例子),第二个typedef应该被使用,但是我不能从gdb访问它,这让我认为它没有被使用。不过,我想检查一下是否正确。 谢谢! – bartgol