【问题标题】:Windbg symbol errorWindbg 符号错误
【发布时间】:2017-07-30 21:27:09
【问题描述】:

我正在尝试使用 WinDbg 调试应用程序。该服务器无法访问 Internet,因此我无法使用 Microsoft Symbol 服务器。我继续下载了 Server 2012 R2 Retail 的符号。将它们移到服务器上,并安装到 C:\Symbols。

当我尝试运行调试器时,我得到以下输出。

CommandLine: C:\actionsync\ActionSync\ActionSync.exe

************* Symbol Path validation summary **************
Response                         Time (ms)     Location 
Deferred                                       srv*
DBGHELP: Symbol Search Path: .sympath srv*c:\symbols*

************* Symbol Path validation summary **************
Response                         Time (ms)     Location
Deferred                                       .sympath srv*c:\Symbols*
DBGHELP: Symbol Search Path: .sympath srv*c:\symbols*
DBGHELP: Symbol Search Path: .sympath srv*c:\symbols*
Symbol search path is: .sympath srv*c:\Symbols*
Executable search path is: srv*
DBGHELP: SharedUserData - virtual symbol module
ModLoad: 00ec0000 00ecc000   ActionSync.exe
ModLoad: 77120000 7728f000   ntdll.dll
ModLoad: 6fc30000 6fc86000   C:\Windows\SysWOW64\MSCOREE.DLL
ModLoad: 74de0000 74f20000   C:\Windows\SysWOW64\KERNEL32.dll
ModLoad: 74f20000 74ff7000   C:\Windows\SysWOW64\KERNELBASE.dll
(1054.478): Break instruction exception - code 80000003 (first chance)
DBGHELP: Invalid path: '.sympath srv*c:\symbols*'
DBGHELP: C:\Windows\SYSTEM32\wntdll.pdb - file not found
DBGHELP: wntdll.pdb - file not found
*** ERROR: Symbol file could not be found.  Defaulted to export symbols for ntdll.dll - 
DBGHELP: ntdll - export symbols
eax=00000000 ebx=00000000 ecx=7fdc0000 edx=00000000 esi=7ee16000 edi=00000000
eip=771d3c7d esp=0104f2f4 ebp=0104f320 iopl=0         nv up ei pl zr na pe nc
cs=0023  ss=002b  ds=002b  es=002b  fs=0053  gs=002b             efl=00000246
ntdll!LdrInitShimEngineDynamic+0x6dd:
771d3c7d cc              int     3

我对使用 WinDbg 完全陌生。另外,我无法在这台机器上安装 VS。

据我所知,我已正确设置所有内容,但我仍然无法调试此应用程序。

任何帮助将不胜感激。


编辑1:

我根据 Thomas Weller 的评论更新了符号路径

这是输出

0:000> .sympath
Symbol search path is: .sympath srv*c:\Symbols*
Expanded Symbol search path is: .sympath srv*c:\symbols*

************* Symbol Path validation summary **************
Response                         Time (ms)     Location
Deferred                                       .sympath srv*c:\Symbols*
Error: Change all symbol paths attempts to access '.sympath c:\symbols' failed: 0x7b - The filename, directory name, or volume label syntax is incorrect.

************* Symbol Path validation summary **************
Response                         Time (ms)     Location
Error                            16            .sympath c:\symbols
DBGHELP: Symbol Search Path: .sympath c:\symbols
DBGHELP: Symbol Search Path: .sympath c:\symbols
0:000> .reload
Reloading current modules
.....
DBGHELP: Invalid path: '.sympath c:\symbols'
DBGHELP: C:\Windows\SYSTEM32\wntdll.pdb - file not found
DBGHELP: wntdll.pdb - file not found
*** ERROR: Symbol file could not be found.  Defaulted to export symbols for ntdll.dll - 
DBGHELP: ntdll - export symbols

************* Symbol Loading Error Summary **************
Module name            Error
ntdll                  All symbol search paths were invalid
            Please check your symbol search path.


The following location did not respond and were excluded during symbol loading:
.sympath c:\symbols

编辑 2:

所以,sympath 似乎是区分大小写的。

我更新了同情C:\Symbols

这是输出。

************* Symbol Path validation summary **************
Response                         Time (ms)     Location
OK                                             c:\Symbols
DBGHELP: Symbol Search Path: c:\symbols
DBGHELP: Symbol Search Path: c:\symbols
0:000> .reload
Reloading current modules
.....
DBGHELP: c:\symbols\wntdll.pdb - file not found
DBGHELP: c:\symbols\dll\wntdll.pdb - file not found
DBGHELP: c:\symbols\symbols\dll\wntdll.pdb - file not found
DBGHELP: C:\Windows\SYSTEM32\wntdll.pdb - file not found
DBGHELP: wntdll.pdb - file not found
*** ERROR: Symbol file could not be found.  Defaulted to export symbols for ntdll.dll - 
DBGHELP: ntdll - export symbols

************* Symbol Loading Error Summary **************
Module name            Error
ntdll                  PDB not found : c:\symbols\symbols\dll\wntdll.pdb
            Unable to locate the .pdb file in this location

【问题讨论】:

  • 使用.sympath c:\symbols而不使用srv*
  • @ThomasWeller 查看我的新输出
  • 这是 Windows,Windows 不区分大小写。在我看来,您通过某些菜单设置了符号路径。如果您通过菜单进行操作,请不要使用.sympath,因为.sympath 是命令。如果你在命令窗口中输入它,那么你需要.sympath
  • 好的,所以你有一台可以上网的机器,你可以在其中下载符号,然后你可以通过 USB 或其他东西将符号传输到你调试的机器上。那是对的吗?如果是这样,您的问题有解决方案
  • 我确实将它们下载到了可以访问互联网的机器上。我从这里得到它们:developer.microsoft.com/en-us/windows/hardware/download-symbols。我下载了 Server 2012 R2 检查。然后我将 msi 复制到服务器并运行它。我相信我应该下载零售版。我现在正在这样做。

标签: windbg


【解决方案1】:

对于这两种解决方案,您都需要一份 WinDbg 的副本(不一定是安装)。您可以在 WinDbg 文件夹中找到 symchk

特定转储/特定调试会话的解决方案

  1. 在您正在调试的机器上,使用.dump 创建故障转储文件。如果您已有故障转储文件,请跳过此步骤。

  2. 在命令提示符下,创建一个清单文件,即包含有关要下载的符号信息的文件

    symchk /id <dumpfile>.dmp /om D:\symbols.manifest
    

    /id 用于输入 = 转储

    /om 用于输出 = 清单

  3. 将该清单文件传输到可以访问 Internet 的计算机上。

  4. 然后在互联网机器上运行

    symchk /im X:\symbols.manifest /s srv*X:\downloadedsymbols\*http://msdl.microsoft.com/download/symbols /od
    

    在命令提示符下。

    /im 用于输入 = 清单

    /od 用于输出详细信息(如详细)

  5. 在没有 Internet 访问的情况下将符号传回机器。将它们复制到 新文件夹,例如c:\downloadedsymbols,而不是 c:\symbols。不要使用现有的符号路径,因为 n-tier-layout 可能不匹配。

  6. 在 WinDbg 中打开故障转储。

  7. 修复符号

    .sympath C:\downloadedsymbols
    

    也许

    .reload /f
    

无网机器全部符号检索解决方案

注意:这个过程可能需要很长时间,因为它可能会下载数千个符号

  1. 在命令提示符下,运行

    symchk /r /if %windir% /om D:\windir.manifest
    

    /r 用于递归

    /if 用于输入 = 文件

    /om 用于输出 = 清单

  2. 将该清单文件传输到具有 Internet 访问权限的其他计算机上。

  3. 在互联网机器上,运行

    symchk /im X:\windir.manifest /s srv*X:\winsymbols\*http://msdl.microsoft.com/download/symbols /od
    

    /im 用于输入 = 清单

    /od 用于输出详细信息(如详细)

  4. 在没有 Internet 访问的情况下将符号传回机器。将它们复制到 新文件夹,例如c:\winsymbols,而不是 c:\symbols。不要使用现有的符号路径,因为 n-tier-layout 可能不匹配。

  5. 将符号与

    一起使用
    .sympath C:\winsymbols
    .reload
    

【讨论】:

  • 尝试在命令行上运行第 2 步时,'symchk' is not recognized as an internal or external command ...
  • 它在 WinDbg 文件夹中。它不是 Windows 命令,它带有 Windows 的调试工具
  • 很好,托马斯。我不知道 symchk 可以做到这一点。我打算建议他在另一台机器上调试转储,但我知道这并不总是可能的。
猜你喜欢
  • 2012-02-21
  • 1970-01-01
  • 2010-10-03
  • 2015-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多