none
请教一个关于debug symbol问题 RRS feed

  • 问题

  • 最近在看一些C++的程序,在调试的时候想看一些系统dll的函数调用信息,我核对了我当前的XP系统为SP3, 于是下载并安装了windows symbol package:Windows XP with Service Pack 3 x86 retail symbols, all languages,  并在Visual C++ 2003.net 项目属性-> Debugging -> Symbol Path 设置好符号路径。但调试时发现有些dll的symbol还是不能加载,有些dll的symbol却可以加载,一下是我visual studio output 窗口中的部分信息:

    ---------------------------------------------------------------------------------

    'MyTest.exe': Loaded 'C:\WINDOWS\system32\ntdll.dll', No symbols loaded.

    'MyTest.exe': Loaded 'C:\WINDOWS\system32\kernel32.dll', No symbols loaded.

    'MyTest.exe': Loaded 'C:\WINDOWS\system32\mfc71d.dll', Symbols loaded. 

    'MyTest.exe': Loaded 'C:\WINDOWS\system32\msvcr71d.dll', Symbols loaded.

    'MyTest.exe': Loaded 'C:\WINDOWS\system32\gdi32.dll', No symbols loaded.

    'MyTest.exe': Loaded 'C:\WINDOWS\system32\user32.dll', Symbols loaded.

    'MyTest.exe': Loaded 'C:\WINDOWS\system32\version.dll', Symbols loaded.

    'MyTest.exe': Loaded 'C:\WINDOWS\system32\jscript.dll', No symbols loaded.

    'MyTest.exe': Loaded 'C:\WINDOWS\system32\xpsp2res.dll', No symbols loaded.

    ---------------------------------------------------------------------------------

    不知道是什么原因,望高手指点一下,谢谢!

     

    2010年4月16日 8:48

答案

全部回复

  • 安装了Symbol后你的系统是不是又安装过什么补丁?只要你安装过补丁,那Symbol就不行了,它的版本必须和你的DLL一致才行


    0xBAADF00D
    2010年4月17日 10:33
    版主
  • 当程序改变了,就会造成符号表不match 的情况。建议你使用symchk 直接检查C:\Windows\System32 下的动态库版本,下载对应的符号表文件。

    请参考:http://support.microsoft.com/default.aspx/kb/311503?p=1

    要设置环境变量_NT_SYMBOL_PATH = symsrv*symsrv.dll*本地缓存路径*http://msdl.microsoft.com/download/symbols

     

    2010年4月17日 11:41
    版主
  • 今天我又试了一下,在vs.net 2003 Solution属性里设置Debug Symbol Files 为SRV*D:\WorkSpace\Development\Symbols_new*http://msdl.microsoft.com/download/symbols,F5调试的时候看到新的symbol file被下载到我指定的目录中,观察visual studio output发现有些dll的symbol还是不能加载,而且还出现了Unknown symbol handler error和PDB format is obsolete错误,不知该怎么弄了。难道是微软没有提供符合我机器上dll版本的PDB文件?

    'MyTest.exe': Loaded 'C:\WINDOWS\system32\ntdll.dll', Symbols loaded.

    'MyTest.exe': Loaded 'C:\WINDOWS\system32\kernel32.dll', Symbols loaded.

    'MyTest.exe': Loaded 'C:\WINDOWS\system32\mfc71d.dll', Symbols loaded.

    'MyTest.exe': Loaded 'C:\WINDOWS\system32\msvcr71d.dll', Symbols loaded.

    'MyTest.exe': Loaded 'C:\WINDOWS\system32\gdi32.dll', Symbols loaded.

    'MyTest.exe': Loaded 'C:\WINDOWS\system32\user32.dll', No symbols loaded.

    'MyTest.exe': Loaded 'C:\WINDOWS\system32\shlwapi.dll', Symbols loaded.

    'MyTest.exe': Loaded 'C:\WINDOWS\system32\advapi32.dll', Symbols loaded.

    'MyTest.exe': Loaded 'C:\WINDOWS\system32\rpcrt4.dll', Symbols loaded.

    'MyTest.exe': Loaded 'C:\WINDOWS\system32\secur32.dll', Symbols loaded.

    'MyTest.exe': Loaded 'C:\WINDOWS\system32\msvcrt.dll', Unknown symbol handler error.

    'MyTest.exe': Loaded 'C:\WINDOWS\system32\comctl32.dll', PDB format is obsolete.

    ‘MyTest.exe': Loaded 'C:\WINDOWS\system32\ole32.dll', PDB format is obsolete.

     

    2010年4月19日 8:00
  • PDB format is obsolete 是说这个PDB 文件太老了,格式已经被弃用了。
    • 已标记为答案 Nancy Shao 2010年4月23日 9:46
    2010年4月19日 8:18
    版主