2015-11-13 175 views
0

我没有使用GDB很多。通常我会检查简单的变量,但从来没有类这次我正在检查课程,因为我正在开始一个新项目(LLVM)。GDB输出的解释

这里是

disp CachedTable

CachedTable = {<llvm::DenseMapBase<llvm::DenseMap<std::pair<unsigned int, unsigned int>, unsigned int, llvm::DenseMapInfo<std::pair<unsigned int, unsigned int> > >, std::pair<unsigned int, unsigned int>, unsigned int, llvm::DenseMapInfo<std::pair<unsigned int, unsigned int> > >> = {<No data fields>}, Buckets = 0x1a9e190, NumEntries = 2, NumTombstones = 0, NumBuckets = 64}

输出如何理解这个输出?

任何帮助表示赞赏。

回答

1

这是llvm::DenseMap类的数据成员的输出。
http://llvm.org/docs/doxygen/html/DenseMap_8h_source.html

输出的第一部分是指,它的基类llvm::DenseMapBase没有任何数据成员:

<llvm::DenseMapBase<llvm::DenseMap<std::pair<unsigned int, unsigned int>, unsigned int, llvm::DenseMapInfo<std::pair<unsigned int, unsigned int> > >, std::pair<unsigned int, unsigned int>, unsigned int, llvm::DenseMapInfo<std::pair<unsigned int, unsigned int> > >> = {<No data fields>} 

其余输出打印llvm::DenseMap数据成员的值:

Buckets = 0x1a9e190, NumEntries = 2, NumTombstones = 0, NumBuckets = 64 

通常很难解释像这样的一行输出,特别是对于长结构/从类未知代码,所以它的价值开启GDB漂亮的打印模式:

(gdb) set print pretty on 

Print Settings

set print pretty on 
    Cause gdb to print structures in an indented format with one member per line, like this: 

       $1 = { 
       next = 0x0, 
       flags = { 
        sweet = 1, 
        sour = 1 
       }, 
       meat = 0x54 "Pork" 
       } 
+0

什么是逗号分隔的项目?他们是继承类吗? – flashburn

+0

不,他们是数据成员。 1-st是一个指针,另外3个是数字值。 (这是一个哈希表的实施) – ks1322

+0

我应该澄清。这就是我用逗号分隔的项目的意思,',unsigned int,llvm :: DenseMapInfo ,> std :: pair ,unsigned int,llvm :: DenseMapInfo > >>。这些数据成员? – flashburn