Нет файлов в базе данных программы pdb - PullRequest
0 голосов
/ 16 июня 2009

У меня есть программная база данных .pdb из приложения C ++, скомпилированного в режиме отладки в Windows VS2005. Я использую DIA SDK для поиска имен функций, но не могу найти имена файлов для символов.

Есть ли какой-то переключатель, который мне нужно включить? Это работает?!

1 Ответ

0 голосов
/ 23 июня 2009

Таким образом, ответ на этот вопрос заключается в том, что вы сначала находите номер строки, а затем исходный файл?!

* 1003 Е.Г. *

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
    }
...