Как управлять общесистемными библиотеками при просмотре дампа в VS или WinDBG?

Когда я загружаю файл дампа процесса 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.)


person Martin Ba    schedule 19.04.2011    source источник
comment
Вы пробовали !sym шумно? Это активирует шумную загрузку символов. И вы уверены, что в крахе есть стеки вызовов из вышеуказанных dll?   -  person Naveen    schedule 19.04.2011
comment
@Naveen - вопрос был навеян этим вопросом о pdm.dll.   -  person Martin Ba    schedule 19.04.2011


Ответы (1)


К сожалению, процесс обновления символов, доступных в MS, похоже, управляется стадом ослов, большинство из которых умерло много лет назад, а остальные работают только по сменной схеме, включающей чередующиеся вторые четверги мая. если полнолуние приходится на воскресенье января.

Таким образом, вы можете ожидать (не) найти много недостающих символов, и с этим ничего нельзя поделать. Запуск Fiddler позволит вам проверить, правильно ли выполняется вызов символов и 404-й код symserv, но помимо этого вам просто нужно обойтись без него.

Не знаю, почему 10 лет назад не автоматизировали весь этот бизнес, чтобы никто ничего не выпускал из MS без публикации символов, но этого не произошло.

person Will Dean    schedule 19.04.2011