PDB symbol reader status?


What is the current status of LLDB’s PDB file parser on Windows? It was announced back in 2015 that PDB support is coming soon, so I was wondering where it’s at currently.

Basic PDB support is in LLDB if you’re running on Windows. LLDB has a SymbolFilePDB plugin that relies on a PDB abstraction in LLVM. There is currently just one implementation of that abstraction, and it relies on DIA, which is a Microsoft-provided DLL on Windows for looking up information in a PDB.

I’m currently working on a native PDB reader that implements the same interface without reliance on DIA, so that should eventually provide the same functionality even if you’re not running on Windows.

Browsing through the PDB plugin in LLDB, I see a lot of “//TODO: Implement this” methods, so you won’t (yet) have rich type information. But you can set breakpoints by name, get a stack backtrace, print variable values, etc.

I’m trying to use LLDB built from svn trunk: for MSVC emitted binaries it cannot set any breakpoints, and for clang-cl outputs it crashes when setting a breakpoiint by file/line. Are these scenarios supposed to work?
WinDbg works fine in both cases, so the debug info is probably ok.

(I’m using VS 2017 Build Tools, if that matters).

For clang-cl you need to use -fuse-ld=lld. For msvc only a small amount of pdb support was added to lldb, namely the ability to resolve file and line info.

Why -fuse-ld=lld? What does lld do differently than MS linker?

It can handle linking dwarf debug info. Also I misspoke, you can’t get dwarf debug info with clang-cl, but you can with clang++ on windows. Look at how the test suite on windows compiles the inferiors. That’s currently the best debugging experience of Windows programs.

Unfortunately i was never able to get the rest of windows support implemented as i got pulled off to add support for writing codeview/pdb to clang-cl

Thanks, I know that dwarf works with lldb on Windows, but I was specifically trying to debug a program compiled with pdb debug info.
(Why not a native Windows debugger? Because I have existing code that uses lldb api.)