使用VS API开发一个PDB Dumper并且可以在没装VS2010的计算机上运行 (三)

2014-11-24 12:15:06 · 作者: · 浏览: 16
=SymTagNull;
classSymbol->get_symTag((DWORD*)&symTag);
if(symTag==SymTagUDT)
{
PrintXMLOpen(file, 1, L"class", className.Buffer());
DumpBaseClasses(file, classSymbol);
DumpNestedClasses(file, classSymbol);
DumpTypedefs(file, classSymbol);
DumpFields(file, classSymbol);
DumpMethods(file, classSymbol);
PrintXMLClose(file, 1, L"class");
}
else if(symTag==SymTagEnum)
{
PrintXMLOpen(file, 1, L"enum", className.Buffer());
DumpFields(file, classSymbol);
PrintXMLClose(file, 1, L"enum");
}
}
for(int i=0;i {
udtSymbols.Values()[i]->Release();
}
udtSymbols.Clear();

PrintXMLOpen(file, 1, L"functions", NULL);
for(int i=0;i {

WString funcName=funcSymbols.Keys()[i];
IDiaSymbol* funcSymbol=funcSymbols.Values()[i];
DumpMethod(file, funcSymbol);
}
PrintXMLClose(file, 1, L"functions");
for(int i=0;i {
funcSymbols.Values()[i]->Release();
}
funcSymbols.Clear();
}

void DumpPdbToXml(IDiaSymbol* exeSymbol, const wchar_t* xml)
{
FileStream fileStream(xml, FileStream::WriteOnly);
CacheStream cacheStream(fileStream, 1048576);
BomEncoder encoder(BomEncoder::Utf16);
EncoderStream encoderStream(cacheStream, encoder);
StreamWriter file(encoderStream);
PrintString(file, L"< xml version=\"1.0\" encoding=\"utf-16\" >\r\n");
PrintXMLOpen(file, 0, L"pdb", NULL);
Dump(file, exeSymbol);
PrintXMLClose(file, 0, L"pdb");
}
}
下一篇文章将讲到我如何使用上面的程序产生的xml和Visual Studio的本地C++编译器生成的XML文档,来合并成一个完整的XML描述的文档。


摘自 λ-calculus(惊愕到手了欧耶)