【发布时间】:2013-11-19 20:20:29
【问题描述】:
有时我们客户的故障转储文件会包含对
的引用mfc80u.dll *C:\Windows\winsxs\x86_microsoft.vc80.mfc_1fc8b3b9a1e18e3b_8.0.50727.5592_none_cbf62b764709d1c9\mfc80u.dll N/A N/A No matching binary found. 20 8.00.50727.5592 11.01.2011 07:32 6E860000-6E96F000 memory.dmp: Native
msvcr80.dll *C:\Windows\winsxs\x86_microsoft.vc80.crt_1fc8b3b9a1e18e3b_8.0.50727.5592_none_d09196c24426e2d4\msvcr80.dll N/A N/A No matching binary found. 21 8.00.50727.5592 11.01.2011 06:17 74E40000-74EDB000 memory.dmp: Native
问题是,我没有得到正确的堆栈跟踪,因为这些 DLL (from April, 2011) 被另一个补丁 from June, 2011 和 contrary to what I can find on the net 取代,download from MS 确实 不 包含 5592 版本,但仅包含 6195 版本的 CRT/MFC/... DLL。
我们可执行文件的清单指向版本8.0.50727.4053,但这无济于事,因为此版本已被 5592 和后来的 6195 取代。SxSTrace 输出如下所示:(忽略德语文本并查看版本号)
INFORMATION: Verweis "Microsoft.VC80.CRT,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="8.0.50727.4053"" wird aufgelöst.
...
INFORMATION: Für ProcessorArchitecture "x86" wird der Verweis aufgelöst.
INFORMATION: Für ProcessorArchitecture "x86" wird der Verweis aufgelöst.
INFORMATION: Verweis für Kultur "Neutral" wird aufgelöst.
INFORMATION: Bindungsrichtlinie wird angewendet.
INFORMATION: Sucht nach Herausgeberrichtlinien in "C:\Windows\WinSxS\manifests\x86_policy.8.0.microsoft.vc80.crt_1fc8b3b9a1e18e3b_8.0.50727.6195_none_517205a10f4550e3.manifest".
INFORMATION: Die Assemblierungsversion wurde von der Herausgeberrichtlinie umgeleitet.
INFORMATION: Die Bereitstellungsrichtlinien-Assemblierungsidentität ist Microsoft.VC80.CRT,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="8.0.50727.6195".
现在,也许我可以从客户的 PC 上获取确切的 DLL,但这仍然只剩下 DLL,而且我仍然没有任何调试符号(PDB 文件)。
因为,查看我的转储(例如,对于 kernel32),我可以看到通常所有系统 DLL 都应该从 MS 符号服务器(或其缓存)加载 --
kernel32.dll C:\WINDOWS\Symbols\Cache\kernel32.dll\4e211484100000\kernel32.dll N/A N/A Symbols loaded (source information stripped). C:\WINDOWS\Symbols\Cache\wkernel32.pdb\0EB73428EC4E430FB8EDD94C5946855B2\wkernel32.pdb 3 6.01.7600.16850 16.07.2011 05:33 76820000-76920000 memory.dmp: Native
我必须假设微软从他们的符号服务器中清除了这些文件的 5592 版本,从而有效地阻止了任何有用的调试,如果客户 PC 确实包含 April,2011更新,但不是 2011 年 6 月的更新。从我可以从 MS 页面推断,这些更新包含在 Windows 更新中,所以如果客户的更新机制不完整,我真的无能为力。
是否仍然从 MS 下载包含 5592 DLL 和 PDB 文件的原始补丁?
更新:似乎 MS 符号服务器确实包含 5592 DLL 版本的 PDB 文件,但它不包含 DLL。 (现在这是否有意义是另一个问题,但也许这就是它与这些 DLL 一起工作的方式。)
我可以确定以下几点:
- 4053 的 PDB:
...\Cache\msvcr80.i386.pdb\7D5669C7431445CD84D149AE19FE3CD51\msvcr80.i386.pdb - 5592 的 PDB(因为 WinDbg 确实加载了那个):
...\cache\msvcr80.i386.pdb\3FA5DD7B7FAF4F2EAC5ABEDC03012DB21\msvcr80.i386.pdb - 6195 的 PDB:
...Cache\msvcr80.i386.pdb\54C9E2F351544D1CB39517DC4B299EA81\msvcr80.i386.pdb
【问题讨论】:
-
是的,这敲响了警钟,他们在第一次更新中失败并迅速更换了它。您需要要求客户端安装最新更新。指出他们当前的版本很糟糕是一个明显的动机。
-
@HansPassant - 是的,无论如何我们都会指出这一点。但是 oc 它对我分析 this 转储没有帮助。 (而且它不像是其中一个可重现的,而是随机崩溃。)
标签: windows visual-c++ debug-symbols winsxs