Não há nomes de arquivos no banco de dados do programa pdb
-
05-07-2019 - |
Pergunta
Eu tenho um banco de dados do programa PDB a partir de uma aplicação C ++ compilado na depuração no Windows VS2005. Eu uso o DIA SDK para encontrar nomes de função, mas eu não consigo recuperar os nomes de arquivo para os símbolos.
Existe alguma necessidade interruptor I para ligar? Isso funciona?!
Solução
Portanto, a resposta para isso parece ser que você encontrar o número da linha em primeiro lugar e, em seguida, o arquivo de origem?!
por exemplo.
virtual IProgramSymbol^ getSymbolFromAddress(UInt32 address)
{
// Find the symbol with the virtual address we were given
IDiaSymbol ^ sym = nullptr;
m_session->findSymbolByVA( address, SymTagEnum::SymTagFunction, sym );
if (sym != nullptr)
{
// Get source code information via lines numbers. Odd, but this seems to be the way
// to do it.
String ^ srcFile = "unknown";
int line = 0;
UInt64 startAdr = sym->virtualAddress;
// Find line numbers from start_address to start_address+1, which should be 1 symbol!
IDiaEnumLineNumbers ^ lines;
m_session->findLinesByVA(startAdr, 1, lines);
if (lines != nullptr)
{
// get the line number
IDiaLineNumber ^ lnb = lines->Item(0);
line = lnb->lineNumber;
// get the source file from the line number (weird!)
IDiaSourceFile ^ sf = lnb->sourceFile;
if (sf != nullptr)
{
srcFile = sf->fileName;
}
}
return gcnew DiaSymbol(sym, srcFile, line); // found a function
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow