In a few cases Bug Validator will fail to load symbols for a DLL that you believe you have provided symbols for. This topic describes the possible causes. Please read the suggested course of action for each compiler.
Symbols are defined in PDB files. A PDB file has the same name as the DLL to which it refers, with a PDB extension instead of DLL or EXE. For example:
text.exe would have a PDB file called test.pdb.
features.dll would have a PDB file called features.pdb.
Bug Validator uses the Microsoft supplied DbgHelp.dll to perform all symbol handling activities. When searching for the symbols for a DLL, DbgHelp expects to find a PDB file with the correct checksum that matches the DLL. If DbgHelp finds a PDB file with a different checksum, DbgHelp will fail to load the symbols and the search for a symbol file for the DLL will end.
To ensure that the correct DLL and PDB file are found the following need to be TRUE.
•The DLL and PDB file have the same name, except for the extension.
•The first PDB file found with the appropriate name when traversing the PDB search path is the PDB file with the correct checksum.
If DbgHelp is failing to load your symbols (you can check the diagnostics tab for messages indicating such a failure), you need to check the following:
•Ensure that your EXE/DLL is compiled to include symbol information (these are different options to the linker options).
•Ensure that your EXE/DLL is linked to include symbol information (these are different options to the compiler options).
•You are using the most recent version of your DLL.
•You are using the correct version of your DLL (release DLL with release builds, debug DLL with debug builds).
•Verify the above when your application is running by checking the modules loaded by the application. You can check the modules by using the Loaded Modules dialog, or by inspecting the diagnostics tab. You need to be sure that your application is not loading a different DLL with the same name from a different directory that is on the search path.
•Verify that there are no PDB files with the same file name that are on the PDB search path, except for the PDB file you expect to be used.
•Check the version of DbgHelp.dll used by your Visual Studio installation and the version of DbgHelp.dll distributed with Bug Validator. If the version of DbgHelp.dll used by Visual Studio is higher than the version distributed with Bug Validator it is possible that Microsoft have changed the PDB file format. This will result in Bug Validator being unable to read the symbols. To fix this:
•Copy the DbgHelp.dll from Visual Studio to the Bug Validator installation directory.
•When Bug Validator launches an application it copies Bug Validator's DbgHelp.dll to the directory of the executable to ensure that the DbgHelp.dll that is more recent than the default system32\dbghelp.dll (which doesn't get updated by Windows Update). You need to remove these dlls, search for them and delete them (they will be in paths such as c:\myapplication\debug, etc).
Some symbolic information will not load for reasons unknown. In this circumstance, you should (after trying the above suggestions) try changing the location in which symbols are sourced, and also disabling the caching of symbols. Information on this topic is available here.
If after checking all of the above you still have problems, please contact support@softwareverify.com.
You may find that symbols for the MSVCR80.DLL, MSVCR80D.DLL, MF80.DLL, MFC80U.DLL, MFC80D.DLL and MFC80UD.DLL dlls are not loaded. The reason for this is that these symbols are stored in c:\windows\symbols\dll rather than with the DLLs themselves. This is due to the Windows.NET Side-by-Side (WinSxS) DLL/assembly loading. Add the path c:\windows\symbols\dll to the list of paths for Program Database Files on the File Locations tab.
You may need to restart Bug Validator to get valid symbols for MFC80(u)(d).dll if you have already recorded a session for which you did not get symbols. Alternatively you can do the following actions to clear the symbol cache.
•Open the Session Manager from the Managers menu.
•Delete All sessions.
•Close the Session Manager.
•Open the Settings Dialog (in Intermediate or Expert user interface mode).
•Go to the File Cache / Subst Drives tab.
•Click the Flush Cache button.
•Click OK.
You may also want to disable Bug Validator's on-disk cache of symbols read from PDB files. To do this take the following actions:
•Open the Settings Dialog (in Intermediate or Expert user interface mode).
•Go to the Symbol Lookup tab.
•Deselect the Enable caching... check box.
•Click OK.
Metrowerks symbolic information is embedded in the .exe/.dll as CodeView information. Please consult the documentation for CodeWarrior to include debug information (including filenames and line numbers) in the CodeView information.
If after checking all of the above you still have problems, please contact support@softwareverify.com.
Salford FORTRAN95 symbolic information is embedded in the .exe/.dll as COFF (Common Object File Format) information, with some extensions proprietary to Salford Software (which they have kindly shared with Software Verify). Please consult the documentation for Salford FORTRAN95 to include debug information (including filenames and line numbers) in the COFF information.
If after checking all of the above you still have problems, please contact support@softwareverify.com.