Как управлять общесистемными библиотеками при просмотре дампа в VS или WinDBG? - PullRequest
2 голосов
/ 19 апреля 2011

Когда я загружаю файл дампа процесса 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, поэтому мне было интересно, если я что-то упустил, что они не получены из символа сервер

Или мне просто придется справиться с тем фактом, что в моем процессе (-dumps) у меня будут DLL, в которых нет символов, и , если стек аварийного вызова содержит любую такую ​​DLL, я Вам повезет, что стек вызовов пригоден для использования?

(Примечание. Вывод, приведенный выше, является лишь примером. Но вы можете иметь сбой практически в любой загруженной DLL, поскольку ваша программа может передавать мусор при любом вызове любой DLL.)

1 Ответ

3 голосов
/ 19 апреля 2011

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

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

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

...