2009-06-16 7 views
0

Ich habe eine .pdb-Programmdatenbank von einer C++ - Anwendung kompiliert in debug auf Windows VS2005. Ich benutze das DIA SDK, um Funktionsnamen zu finden, aber ich kann nicht scheinen, die Dateinamen für die Symbole zu erhalten.Keine Dateinamen in der pdb-Programmdatenbank

Gibt es einen Schalter, den ich einschalten muss? Funktioniert das?!

Antwort

0

Also die Antwort darauf scheint zu sein, dass Sie zuerst die Zeilennummer und dann die Quelldatei finden ?!

z.

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 
    }