Welcome to MSDN Blogs Sign in | Join | Help

What does "pdb is obsolete" really mean?

If your Visual Studio debugger says this to you, it either means

  1. Your PDB really is obsolete
  2. Your debugger is obsolete

1. It gets expensive in terms of testing and (sometimes) development to read every single old PDB format, so with each release the C++ team determine what is the oldest PDB they can read is. 8.0 will read PDBs created with 5.0, but I don't believe it can read a 4.0 PDB any more.

2. A common case for this is a PDB created with 8.0, then read with Visual Studio 7.1 or earlier. There was a lack of forethought on error codes, so there was one error that mean basically "huh? can't read this".

How do you tell the version of a PDB you may ask? Believe it or not you TYPE the pdb itself: if it says

Microsoft C/C++ MSF 7.00

then it is 7.0 or newer. If it says something else, then it is older than that. Unfortunately I am not aware of any public tools that will tell you the version with greater granularity.

Published Friday, December 09, 2005 5:18 PM by andypennell

Comment Notification

If you would like to receive an email when updates are made to this post, please register here

Subscribe to this post's comments using RSS

Comments

Monday, April 23, 2007 11:11 PM by Raymond Zhang

# re: What does "pdb is obsolete" really mean?

Andy, could you advise what does MSF mean in the signature. As I know, the signaure is followed by DS.

Tuesday, April 24, 2007 12:08 PM by andypennell

# re: What does "pdb is obsolete" really mean?

MSF stands for "Microsoft Stream Format" I believe. DS is Dan Spalding, who owned the linker and much of the PDB code for many years before retiring. RS is the other initial in the newer PDB header, Richard Shupak, who also had a substantial hand in this area. Well in many areas at MS in fact. He is in MS Research.

Tuesday, April 24, 2007 8:59 PM by Raymond Zhang

# re: What does "pdb is obsolete" really mean?

Andy, thanks for you answer and I have great respect to the heroes. BTW, in PDB 2.0, the signature is JG? Does that indicate another hero?

Wednesday, April 25, 2007 2:48 PM by andypennell

# re: What does "pdb is obsolete" really mean?

PDB 2.0s are before my time (my first product was VC4). I cannot recall a team member "JG".

Wednesday, August 29, 2007 6:02 AM by Tamas

# re: What does "pdb is obsolete" really mean?

Saturday, November 10, 2007 5:33 PM by Koby Roberts

# re: What does "pdb is obsolete" really mean?

Any way of changing the mismatched info on a PDB if a simple rebuild of a dll or exe was does and enough of the signature changed so that VS 2005 won't load the pdb, but WinDbg will with a force reload?  I have a dll that made it to a customer and the dll got automatically rebuilt before we could iron out our build process.  Oops!

Thanks!

Koby

Monday, November 12, 2007 6:45 PM by andypennell

# re: What does "pdb is obsolete" really mean?

No, VS deliberately will never load a PDB that doesn't match the binary. Your best hope is to use windbg, or to try patching the debug header in the PE file to match the PDB that you do have. Also, demote the release manager for that product...

Monday, June 09, 2008 10:47 PM by Jan Gray

# re: What does "pdb is obsolete" really mean?

JG is Jan Gray.

I designed and implemented the PDB file format and the incrementally, transactionally updated store of symbols and types that reside therein.

MSF stands for multi-stream file.  The PDB is like a simple transactionally updated filesystem in a single file.  There is a metadata stream, some name table streams, a stream for global types, one for each module's symbols, etc.  These streams are updated during compile and incremental linking.

The file is transactional so that it is effectively impossible to logically corrupt it even if the program is interrupted between any two arbitrary writes to the file.

Tuesday, June 10, 2008 11:29 AM by andypennell

# re: What does "pdb is obsolete" really mean?

Hi Jan! I should have known that JG was you, sorry.

Leave a Comment

(required) 
required 
(required) 
 
Page view tracker