zar
zar

Reputation: 12247

WinDbg doesn't really search pdb file in the provided path

When I provide a symbol path in simple demo application, it works fine but in real application it doesn't the pdb! I add path in both cased the same way (actual paths are obviously different):

.sympath+ c:\test\demoPdb 

The reason it may work in demo is because I do 'Open Executable'. In case of my real application, I am opening a crash dump file. But should that really make any difference?

I have made sure I have provided the image file path and the symbols path but the verbose output shows no sign it is looking for the pdb file in that provided folder or caching it.

For example in case of demo, there is the following line which indicates the file cached (so it was read).

DBGHELP: c:\test\app\pdb\App.pdb cached to C:\Program Files (x86)\Windows Kits\10\Debuggers\x86\sym\App.pdb\FF12D89B77D742CAB1CB145EC85C2ABD1\App.pdb

But similar line is just not there in verbose output of the real application and I did windows search on it. Is there any reason you can think of why it may not be looking in that folder?

Please note I don't have the exact pdb files and I am expected to see 'mismatched pdb' message but I am not getting that.

Also I did went through this, I don't have access to the actual build machine but I would like it to at least search the file in the path I have given.

Update The output of .symapth is:

0:000> .sympath+ C:\Test\56RC\Release
DBGHELP: Symbol Search Path: cache*;SRV*https://msdl.microsoft.com/download/symbols;c:\test\56rc\release
DBGHELP: Symbol Search Path: cache*;SRV*https://msdl.microsoft.com/download/symbols;c:\test\56rc\release
Symbol search path is: srv*;C:\Test\56RC\Release
Expanded Symbol search path is: cache*;SRV*https://msdl.microsoft.com/download/symbols;c:\test\56rc\release

************* Symbol Path validation summary **************
Response                         Time (ms)     Location
Deferred                                       srv*
OK                                             C:\Test\56RC\Release

Upvotes: 2

Views: 2475

Answers (1)

Thomas Weller
Thomas Weller

Reputation: 59564

As far as I can tell, WinDbg will search in the paths provided. (Actually, it's not WinDbg but WinDbg delegates the work to DbgHelp, but for the reasons of simplicity, I'll call it WinDbg in the following)

However, I see and I can reproduce the issues that you're having, as there are

  1. WinDbg does not only search in the paths that are immediately visible (.sympath, .exepath, .srcpath) but also in other directories, e.g. the path to the PDB that is stored in the debug directory of the executable itself (see this answer for details on the debug directory).
  2. when being !sym noisy WinDbg does not output all the paths in which it searches. That's unfortunate, but only Microsoft could change that, so we have to live with it. In doubt, use Process Monitor with a .pdb filter to really find out where WinDbg is trying to access symbols
  3. The documentation is incomplete, wrong, outdated or fragmented, be it in the built-in help or on the web. This makes it hard to understand. This applies to symbol stores (think about 0-tier to 3-tier, pingme.txt and that stuff), symbol path syntax (srv*, symsrv*, cache* and sorts) or the load order of symbols (in subfolders like dll, symbols, symbols\dll).

So yes, you're having a hard time, but looking at the question history, you have learned a lot and you're getting used to it, like I did and several others managed to deal with it.

Upvotes: 1

Related Questions