diff --git a/src/dbg/pdbdiafile.cpp b/src/dbg/pdbdiafile.cpp index ccb994e1..1e0fbeb1 100644 --- a/src/dbg/pdbdiafile.cpp +++ b/src/dbg/pdbdiafile.cpp @@ -255,22 +255,27 @@ bool PDBDiaFile::getFunctionLineNumbers(DWORD rva, ULONGLONG size, uint64_t imag DWORD relativeVirtualAddress = 0; DWORD lineNumberEnd = 0; - ScopedDiaType lineNumbers; - hr = m_session->findLinesByRVA(rva, static_cast(size), lineNumbers.ref()); + ScopedDiaType lineNumbersEnum; + hr = m_session->findLinesByRVA(rva, static_cast(size), lineNumbersEnum.ref()); if(!SUCCEEDED(hr)) return false; LONG lineCount = 0; - hr = lineNumbers->get_Count(&lineCount); + hr = lineNumbersEnum->get_Count(&lineCount); if(!SUCCEEDED(hr)) return false; - for(LONG n = 0; n < lineCount; n++) + if(lineCount == 0) + return true; + + std::vector lineNumbers; + lineNumbers.resize(lineCount); + + ULONG fetched = 0; + hr = lineNumbersEnum->Next(lineCount, lineNumbers.data(), &fetched); + for(LONG n = 0; n < fetched; n++) { - ScopedDiaType lineNumberInfo; - hr = lineNumbers->Item(n, lineNumberInfo.ref()); - if(!SUCCEEDED(hr)) - continue; + ScopedDiaType lineNumberInfo(lineNumbers[n]); ScopedDiaType sourceFile; hr = lineNumberInfo->get_sourceFile(sourceFile.ref());