Advanced Debugging
About AdvDbg Consult Train Services Products Tools Community Contact  
欢迎光临 高端调试 登录 | 注册 | FAQ
 
  ACPI调试
Linux内核调试
Windows内核调试
 
  调试战役
调试原理
新工具观察
 
  Linux
Windows Vista
Windows
 
  Linux驱动
WDF
WDM
 
  PCI Express
PCI/PCI-X
USB
无线通信协议
 
  64位CPU
ARM
IA-32
  CPU Info Center
 
  ACPI标准
系统认证
Desktop
服务器
 
  Embedded Linux
嵌入式开发工具
VxWorks
WinCE
嵌入式Windows
 
  格蠹调试套件(GDK)
  格蠹学院
  小朱书店
  老雷的微博
  《软件调试》
  《格蠹汇编》
  《软件调试(第二版)》
沪ICP备11027180号-1

WinDbg

帖子发起人: pianoid   发起时间: 2013-10-29 16:47 下午   回复: 6

Print Search
帖子排序:    
   2013-10-29, 16:47 下午
pianoid 离线,最后访问时间: 2023/7/27 7:59:05 pianoid

发帖数前100位
注册: 2011-05-19
发 贴: 11
下载微软公共pdb文件时失败,symsrv报错“函数不正确”
Reply Quote
我最近在分析crash dump时,发现我的WinDbg无法下载微软公共pdb文件了,WinDbg输出信息如下:

0:000> .sympath
Symbol search path is: C:\Windows\System32;D:\Symbols\MySymbols;srv*D:\Symbols\Microsoft*http://msdl.microsoft.com/download/symbols
Expanded Symbol search path is: c:\windows\system32;d:\symbols\mysymbols;srv*d:\symbols\microsoft*http://msdl.microsoft.com/download/symbols
0:000> !sym noisy
noisy mode - symbol prompts on
0:000> .reload /f ntdll.dll
DBGENG:  c:\windows\system32\ntdll.dll image header does not match memory image header.
DBGHELP: c:\windows\system32\ntdll.dll - mismatched
DBGHELP: d:\symbols\microsoft\ntdll.dll\4D00F28096000\ntdll.dll - OK
DBGENG:  d:\symbols\microsoft\ntdll.dll\4D00F28096000\ntdll.dll - Mapped image memory
DBGHELP: c:\windows\system32\ntdll.pdb - file not found
DBGHELP: c:\windows\system32\dll\ntdll.pdb - file not found
DBGHELP: c:\windows\system32\symbols\dll\ntdll.pdb - file not found
DBGHELP: d:\symbols\mysymbols\ntdll.pdb - file not found
DBGHELP: d:\symbols\mysymbols\dll\ntdll.pdb - file not found
DBGHELP: d:\symbols\mysymbols\symbols\dll\ntdll.pdb - file not found
SYMSRV:  ntdll.pdb from http://msdl.microsoft.com/download/symbols: 333688 bytes -    3 percentSYMSRV:  /download/symbols/ntdll.pdb/CEFC0863B1F84130A11E0F54180CD21A2/ntdll.pdb
         函数不正确。
SYMSRV:  ntdll.pdb from http://msdl.microsoft.com/download/symbols: 333688 bytes -    0 percentSYMSRV:  /download/symbols/ntdll.pdb/CEFC0863B1F84130A11E0F54180CD21A2/ntdll.pdb
         函数不正确。
DBGHELP: ntdll.pdb - file not found
*** ERROR: Symbol file could not be found.  Defaulted to export symbols for ntdll.dll - 
DBGHELP: ntdll - export symbols

请问为什么会返回“函数不正确”这个结果?意味着某个无法确定的API的last error为1么?如何解决?

多谢!

IP 地址: 已记录   报告
   2013-10-29, 20:11 下午
Raymond 离线,最后访问时间: 2020/7/3 3:40:25 格蠹老雷

发帖数前10位
注册: 2005-12-19
发 贴: 1,303
Re: 下载微软公共pdb文件时失败,symsrv报错“函数不正确”
Reply Quote

有可能是某一次下载残留了不完整的文件

资源管理器到D:\Symbols\Microsoft\ntdll.pdb/CEFC0863B1F84130A11E0F54180CD21A2/目录下看一下

 

 


IP 地址: 已记录   报告
   2013-10-29, 20:26 下午
pianoid 离线,最后访问时间: 2023/7/27 7:59:05 pianoid

发帖数前100位
注册: 2011-05-19
发 贴: 11
Re: 下载微软公共pdb文件时失败,symsrv报错“函数不正确”
Reply Quote
谢谢回复。
不是残留文件造成的,我在折腾这个问题的过程中遇到了那个错误,但那时的报错信息是“目录或文件已经损坏”之类的话,我已经删掉了不完整的ntdll.pd_文件。
报“函数不正确”的概率很大,每次的百分比都不一致,但有偶尔几次会报“连接超时”,可能是网络问题么?

IP 地址: 已记录   报告
   2013-10-29, 20:31 下午
Raymond 离线,最后访问时间: 2020/7/3 3:40:25 格蠹老雷

发帖数前10位
注册: 2005-12-19
发 贴: 1,303
Re: 下载微软公共pdb文件时失败,symsrv报错“函数不正确”
Reply Quote

可能的


IP 地址: 已记录   报告
   2013-10-29, 21:24 下午
pianoid 离线,最后访问时间: 2023/7/27 7:59:05 pianoid

发帖数前100位
注册: 2011-05-19
发 贴: 11
Re: 下载微软公共pdb文件时失败,symsrv报错“函数不正确”
Reply Quote
再请教一下张老师,我找了一份curl的开源代码,自己编译了一份,然后手工从微软的pdb服务器拉下来了这个pdb文件,一次就成功了,速度很快,只用了两秒钟,应该可以断定不是网络问题了,可能是symsrv的bug么?有解决方法么?总不可能每次都手工拉pdb并解压出来吧。


我手工拉取pdb和校验的输出如下:

Microsoft Windows [版本 6.1.7601]
版权所有 (c) 2009 Microsoft Corporation。保留所有权利。

E:\curl-7.23.1\DLL-Debug>curl --user-agent "Microsoft-Symbol-Server" http://msdl
.microsoft.com/download/symbols/ntdll.pdb/CEFC0863B1F84130A11E0F54180CD21A2/ntdl
l.pd_ --output ntdll.pd_
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  325k  100  325k    0     0   110k      0  0:00:02  0:00:02 --:--:--  123k

E:\curl-7.23.1\DLL-Debug>expand ntdll.pd_ ntdll.pdb
Microsoft (R) 文件扩展实用程序版本 6.1.7600.16385
版权所有 (c) Microsoft Corporation。保留所有权利。

正在将 E:\curl-7.23.1\DLL-Debug\ntdll.pdb 添加到提取队列

正在展开文件 ....

完成展开文件 ...

E:\curl-7.23.1\DLL-Debug>cd C:\WinDDK\7600.16385.1\Debuggers

E:\curl-7.23.1\DLL-Debug>c:

C:\WinDDK\7600.16385.1\Debuggers>dbh E:\curl-7.23.1\DLL-Debug\ntdll.pdb

ntdll [1000000]: info

    SizeOfStruct : 0x690
     BaseOfImage : 0x1677721664x
       ImageSize : 0x1000000
   TimeDateStamp : 0x0
        CheckSum : 0x0
         NumSyms : 0x0
         SymType : SymPdb
      ModuleName : ntdll
       ImageName : E:\curl-7.23.1\DLL-Debug\ntdll.pdb
 LoadedImageName : E:\curl-7.23.1\DLL-Debug\ntdll.pdb
   LoadedPdbName : E:\curl-7.23.1\DLL-Debug\ntdll.pdb
           CVSig : 0x0
          CVData :
          PdbSig : 0x0
        PdbSig70 : 0xcefc0863, 0xb1f8, 0x4130, 0xa1, 0x1e, 0x0f, 0x54, 0x18, 0x0
c, 0xd2, 0x1a
          PdbAge : 0x2
    PdbUnmatched : true
    DbgUnmatched : false
     LineNumbers : false
   GlobalSymbols : false
        TypeInfo : true
   SourceIndexed : false
   PublicSymbols : true
     MachineType : unknown

ntdll [1000000]: q

goodbye

C:\WinDDK\7600.16385.1\Debuggers>

curl拉下来的pdb文件的Sig和Age都是正确的,用windbg加载了一下也没问题,可以匹配。


--
补充一下,我使用的操作系统是64位Win7 SP1专业版,版本号是6.1.7601。
windbg是WDK附带的,版本是6.12.0002.633 AMD64。

IP 地址: 已记录   报告
   2013-10-30, 21:02 下午
Raymond 离线,最后访问时间: 2020/7/3 3:40:25 格蠹老雷

发帖数前10位
注册: 2005-12-19
发 贴: 1,303
Re: 下载微软公共pdb文件时失败,symsrv报错“函数不正确”
Reply Quote

用了这么多年的windbg,偶尔会遇到下载符号的问题,但只是偶尔,千分之一,或者更低

楼主如果真想一探究竟,那当然可以再运行个windbg实例,附加上去... 但是是否这样做,就看是否想花这个时间了


IP 地址: 已记录   报告
   2013-11-01, 10:03 上午
pianoid 离线,最后访问时间: 2023/7/27 7:59:05 pianoid

发帖数前100位
注册: 2011-05-19
发 贴: 11
Re: 下载微软公共pdb文件时失败,symsrv报错“函数不正确”
Reply Quote
多谢张老师。
我重装了SDK中的WinDbg就可以了,再换回WDK的WinDbg也没问题了,很奇怪到底发生了什么。
开始的时候也想过调试一下,但是估计会花费一些时间,因为对此毫无头绪。猜测那个“函数不正确”是因为某个API的错误码是1造成的,若是有寄存器断点的话,倒是可以试一下eax==1时断下来,哈哈。

IP 地址: 已记录   报告
高端调试 » 软件调试 » WinDbg » Re: 下载微软公共pdb文件时失败,symsrv报错“函数不正确”

 
Legal Notice Privacy Statement Corporate Governance Corporate Governance
(C)2004-2020 ADVDBG.ORG All Rights Reserved.