Когда я загружаю файл дампа процесса Windows с другого компьютера с помощью Visual Studio (или WinDBG), он отображает множество сообщений, например:
(вывод из Visual Studio 2005)
'DumpDS20080626-103000-4204-4012.dmp': Loaded 'c:\symbols_cache\ntdll.dll\411096d4b7000\ntdll.dll', Symbols loaded (source information stripped).
'DumpDS20080626-103000-4204-4012.dmp': Loaded 'c:\symbols_cache\kernel32.dll\411096d4106000\kernel32.dll', Symbols loaded (source information stripped)
'DumpDS20080626-103000-4204-4012.dmp': Loaded 'c:\symbols_cache\wsock32.dll\41109712a000\wsock32.dll', Symbols loaded (source information stripped).
'DumpDS20080626-103000-4204-4012.dmp': Loaded 'c:\symbols_cache\winmm.dll\411096df2e000\winmm.dll', Symbols loaded (source information stripped).
...
Эти сообщения показывают, что отладчик (правильно) загружает точные версии всех этих системных библиотек DLL из кэша символов (из http://msdl.microsoft.com/download/symbols).
Однако я также вижу такие сообщения:
'DumpDS20080626-103000-4204-4012.dmp': Loaded '*C:\WINDOWS\system32\iphlpapi.dll', No matching binary found.
'DumpDS20080626-103000-4204-4012.dmp': Loaded 'C:\WINDOWS\system32\mfc42loc.dll', Binary was not built with debug information.
'DumpDS20080626-103000-4204-4012.dmp': Loaded '*C:\WINDOWS\system32\xpsp2res.dll', No matching binary found.
'DumpDS20080626-103000-4204-4012.dmp': Loaded '*C:\WINDOWS\system32\msjet35.dll', No matching binary found.
'DumpDS20080626-103000-4204-4012.dmp': Loaded '*C:\WINDOWS\system32\msjter35.dll', No matching binary found.
'DumpDS20080626-103000-4204-4012.dmp': Loaded '*C:\WINDOWS\system32\msjint35.dll', No matching binary found.
'DumpDS20080626-103000-4204-4012.dmp': Loaded '*C:\WINDOWS\system32\vbscript.dll', No matching binary found.
'DumpDS20080626-103000-4204-4012.dmp': Loaded 'C:\WINDOWS\WinSxS\x86_Microsoft.VC80.MFC_1fc8b3b9a1e18e3b_8.0.50727.762_x-ww_3bf8fa05\mfc80u.dll', Symbols loaded.
'DumpDS20080626-103000-4204-4012.dmp': Loaded 'C:\WINDOWS\WinSxS\x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.762_x-ww_6b128700\msvcr80.dll', Symbols loaded.
...
Итак, есть некоторые файлы, где версия, установленная на моей машине, фактически совпадает с DLL на машине, где был сгенерирован дамп, и есть другие, где версия на моей машина не соответствует двоичному файлу, который был расположен на машине, сгенерировавшей дамп, но, по-видимому, сервер символов MS не содержит никаких бинов/символов для этих библиотек DLL.
Перечисленные выше библиотеки DLL (iphlpapi.dll, ..., msjint35.dll, ...) определенно принадлежат MS, поэтому мне интересно, не упустил ли я чего-нибудь, что не было получено с сервера символов сильный>?
Или мне просто придется смириться с тем фактом, что в моем процессе будут библиотеки DLL (-дампы), которые не имеют символов, и если стек аварийного вызова содержит любую такую DLL, я нужно быть удачливым, чтобы стек вызовов можно было использовать?
(Примечание. Приведенный выше вывод является лишь примером. Но у вас может произойти сбой практически в любой загруженной DLL, поскольку ваша программа может передавать мусор при любом вызове любой DLL.)