visual-studio-2005pdb-filesdia-sdk

No filenames in pdb program database


I have a .pdb program database from a C++ application compiled in debug on Windows VS2005. I use the DIA SDK to find function names but I can't seem to retrieve the filenames for the symbols.

Is there some switch I need to turn on? Does this work?!


Solution

  • So the answer to this appears to be that you find the line number first and then the source file?!

    E.g.

    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
        }