首页
学习
活动
专区
圈层
工具
发布

DIA值
EN

Stack Overflow用户
提问于 2011-11-02 14:01:07
回答 1查看 1K关注 0票数 0

目前,我正在从使用DIA检索的PDB文件中将大量信息转储到XML文件中,这样我就可以使用这些信息来显示有关项目结构的内容等等。

对于命名XML节点,我有一个简单的函数,它将枚举的值转换为一个字符串,然后用于该节点:

代码语言:javascript
复制
string symTagTypeToString(DWORD type) {

string symTagTypename = "";

switch(type) {
case SymTagNull:
    symTagTypename = "null";
    break;
case SymTagExe:
    symTagTypename = "exe";
    break;
case SymTagCompiland:
    symTagTypename = "compiland";
    break;
case SymTagCompilandDetails:
    symTagTypename = "compilandDetails";
    break;
case SymTagCompilandEnv:
    symTagTypename = "compilandEnvironmentVar";
    break;
case SymTagFunction:
    symTagTypename = "function";
    break;
case SymTagBlock:
    symTagTypename = "block";
    break;
case SymTagData:
    symTagTypename = "data";
    break;
case SymTagAnnotation:
    symTagTypename = "annotation";
    break;
case SymTagLabel:
    symTagTypename = "label";
    break;
case SymTagPublicSymbol:
    symTagTypename = "publicSymbol";
    break;
case SymTagUDT:
    symTagTypename = "userDefinedType";
    break;
case SymTagEnum:
    symTagTypename = "enumerator";
    break;
case SymTagFunctionType:
    symTagTypename = "functionType";
    break;
case SymTagPointerType:
    symTagTypename = "pointer";
    break;
case SymTagArrayType:
    symTagTypename = "array";
    break;
case SymTagBaseType:
    symTagTypename = "baseType";
    break;
case SymTagTypedef:
    symTagTypename = "typedef";
    break;
case SymTagBaseClass:
    symTagTypename = "baseClass";
    break;
case SymTagFriend:
    symTagTypename = "friend";
    break;
case SymTagFunctionArgType:
    symTagTypename = "functionArgumentType";
    break;
case SymTagFuncDebugStart:
    symTagTypename = "funcDebugStart";
    break;
case SymTagFuncDebugEnd:
    symTagTypename = "funcDebugEnd";
    break;
case SymTagUsingNamespace:
    symTagTypename = "usingNamespace";
    break;
case SymTagVTableShape:
    symTagTypename = "vTableShape";
    break;
case SymTagVTable:
    symTagTypename = "vTable";
    break;
case SymTagCustom:
    symTagTypename = "custom";
    break;
case SymTagThunk:
    symTagTypename = "thunk";
    break;
case SymTagCustomType:
    symTagTypename = "customType";
    break;
case SymTagManagedType:
    symTagTypename = "managedType";
    break;
case SymTagDimension:
    symTagTypename = "dimension";
    break;
default:
    ostringstream s;
    s << "other" << type;
    symTagTypename = s.str();
    break;
}

return symTagTypename;
}

这个函数包含这里列出的所有值:http://msdn.microsoft.com/de-de/library/bkedss5f.aspx

现在,为了转储DIA信息,我基本上只需要恢复我使用pGlobal->findChildren(SymTagUDT, NULL, nsCaseSensitive, &pIDiaEnumSymbols)获得的所有符号的子符号。奇怪的是,生成的XML包含许多内容,如下所示:

代码语言:javascript
复制
<function name="consumer::main">
  <funcDebugStart name="unknown">
  </funcDebugStart>
  <funcDebugEnd name="unknown">
  </funcDebugEnd>
  <data name="">
  </data>
  <data name="">
  </data>
  <data name="">
  </data>
  <data name="this">
  </data>
  <data name="c">
  </data>
  <other31 name="unknown">
  </other31>
  <other31 name="unknown">
  </other31>
  <other31 name="unknown">
  </other31>
  <other31 name="unknown">
  </other31>
  <other31 name="unknown">
  </other31>
  <other31 name="unknown">
  </other31>
  <other31 name="unknown">
  </other31>
  <other31 name="unknown">
  </other31>
 </function>

现在,别管那些空的名字信息什么的了,到目前为止,这些都还没有完成。我只想知道哪种符号的symTag是31。枚举数似乎包含31个元素,因此0到30之间的值应该是有效的。有人知道这31是什么吗?所讨论的函数如下:

代码语言:javascript
复制
 void main()
 {
   char c;
   cout << endl << endl;

   while (true) {
     in->read(c);
     cout << c << flush;

     if (in->num_available() == 1)
   cout << "<1>" << flush;
     if (in->num_available() == 9)
   cout << "<9>" << flush;
   }
 }

它是SystemC fifo示例项目的一部分。没什么特别的,真的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-11-24 13:35:17

在VS2010附带的DIA版本中,添加了两个SymTagEnum值SymTagCallSite和SymTagMax (尽管它们尚未包含在文档中)。虽然我还没有真正了解这些值所代表的语义,但这肯定解释了我得到的值。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7981610

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档