如何设置Windbg自动下载所有符号?

5

我对编程和调试都不太了解。

我很多时候都处于没有网络的离线状态,正在阅读《Inside Windows Debugging》一书,但有时需要pdb文件。

我经过一番搜索,找到了这个网址:http://msdn.microsoft.com/en-us/windows/hardware/gg463028.aspx,但里面有太多版本了,我花了很长时间才知道如何找到正确的版本。

我找到了正确的版本并下载了下来,但不幸的是没有成功(下载200Mb花费了我超过6小时),我发现自己又回到了起点,即使构建匹配,pdb也不是正确的,而且由于国家政策原因,我无法获取互联网访问权限,所以无法继续阅读这本书。

我的问题很简单,我如何让windbg一次性下载所有二进制文件的所有符号。

操作系统信息: 版本:Windows 7 Ultimate (x86) 构建:7601.win7sp1_gdr.130104-1431

感谢您的耐心阅读我的糟糕英语 :)

2个回答

6

我认为您正在寻找这篇文章构建调试环境

基本上它会下载您当前已安装的所有文件的符号。我在两个月前为一个Windows 7安装程序进行了这样的操作,它很好用,但需要占用8.3GB的磁盘空间并且下载时间很长。

这个概念是遍历Windows目录中的所有DLL和EXE文件,将文件添加到本地符号库中,然后在线检查符号。

SET PATH=%PATH%;"C:\Program Files\Debugging Tools for Windows"
REM Copy all .DLL files
SYMSTORE add /r /f C:\Windows\*.dll /s C:\SymbolStore\OSSymbols /t "Microsoft Windows" /v ""
REM Download symbols for .DLL files
SYMCHK /r C:\Windows\*.dll /s SRV*C:\SymbolStore\OSSymbols*http://msdl.microsoft.com/download/symbols
REM Copy all .EXE files
SYMSTORE add /r /f C:\Windows\*.exe /s C:\SymbolStore\OSSymbols /t "Microsoft Windows" /v ""
REM Download symbols for .EXE files
SYMCHK /r C:\Windows\*.exe /s SRV*C:\SymbolStore\OSSymbols*http://msdn.microsoft.com/download/symbols

当脚本被中断时,您只需再次运行即可。 DLL和EXE文件使用哈希存储。如果文件没有更改,则哈希不应更改。根据文档,“SymChk始终在查询符号服务器之前搜索下游存储,Symstore足够聪明,只会获取缺失的文件。”

是的,Thomas,这正是我想要的。我将测试您的脚本,并让您了解结果,谢谢 :) - ziquvaxi

5
当您附加到要调试的应用程序或打开一个.dmp文件时,请输入:
.reload /f

这将强制加载二进制文件的所有符号。

在进行操作之前,请确保您已正确配置符号服务器。


谢谢tehlexx的回复,但那不是我需要的...我需要下载所有Windows系统二进制文件的所有PDB文件,而不仅仅是当前正在调试的应用程序。理论上,我可以编写一个加载system32中所有dll的应用程序,然后进行调试,这样就可以欺骗windbg下载符号,但是,说真的,我必须走这条路吗? - ziquvaxi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接