Windows调试器(Windbg)无法加载SQL转储文件的符号

我正在排除故障,这是一个重建索引和文本搜索的自动化作业的问题。具体错误:

2020-04-08 02:46:16.29 spid56等待闩锁时发生超时:类'FCB',id 0000000629898238,类型3,任务0x0000000633017C28:0,等待时间300秒,标志0x2000000019,拥有任务0x0000000624023C28。继续等待。

我的计划是查找并检查连接到“拥有任务”的线程。我的指南是这篇文章,位于:https://mssqlwiki.com/2012/09/07/latch-timeout-and-sql-server-latch/

问题是我无法加载符号。我尝试过microsoft源代码以及NuGet源代码:

vector <int> a(10);
// for example to use by removing first element

a = std::vector<int>(a.begin() + 1,a.end())
//its ur turn to change the size

当我执行.reload / f时,会收到以下消息:

.sympath srv*c:\Websymbols*https://symbols.nuget.org/download/symbols

.sympath cache*c:\MyCachedSymbols;srv*C:\websymbols*https://msdl.microsoft.com/download/symbols

谁能告诉我为什么会出现这些路径错误?当我查看实际的符号文件夹时,可以看到它们已在网络上填充,但是由于某些原因,它们似乎没有加载。

谢谢!

0:060> .reload /f
.
SYMSRV:  BYINDEX: 0x395
         c:\symbols*https://msdl.microsoft.com/download/symbols
         sqlservr.exe
         5DF306DC60000

SYMSRV:  UNC: c:\symbols\sqlservr.exe\5DF306DC60000\sqlservr.exe - path not found
SYMSRV:  UNC: c:\symbols\sqlservr.exe\5DF306DC60000\sqlservr.ex_ - path not found
SYMSRV:  UNC: c:\symbols\sqlservr.exe\5DF306DC60000\file.ptr - path not found
SYMSRV:  HTTPGET: /download/symbols/sqlservr.exe/5DF306DC60000/sqlservr.exe
SYMSRV:  HttpQueryInfo: 80190194 - HTTP_STATUS_NOT_FOUND
SYMSRV:  HTTPGET: /download/symbols/sqlservr.exe/5DF306DC60000/sqlservr.ex_
SYMSRV:  HttpQueryInfo: 80190194 - HTTP_STATUS_NOT_FOUND
SYMSRV:  HTTPGET: /download/symbols/sqlservr.exe/5DF306DC60000/file.ptr
SYMSRV:  HttpQueryInfo: 80190194 - HTTP_STATUS_NOT_FOUND
SYMSRV:  RESULT: 0x80190194
DBGHELP: C:\Program Files (x86)\Windows Kits\10\Debuggers\sqlservr.exe - file not found

SYMSRV:  BYINDEX: 0x396
         https://msdl.microsoft.com/download/symbols
         sqlservr.exe
         5DF306DC60000

SYMSRV:  UNC: C:\programdata\dbg\sym\sqlservr.exe\5DF306DC60000\sqlservr.exe - path not found

SYMSRV:  UNC: C:\programdata\dbg\sym\sqlservr.exe\5DF306DC60000\sqlservr.ex_ - path not found

SYMSRV:  UNC: C:\programdata\dbg\sym\sqlservr.exe\5DF306DC60000\file.ptr - path not found

SYMSRV:  HTTPGET: /download/symbols/sqlservr.exe/5DF306DC60000/sqlservr.exe
SYMSRV:  HttpQueryInfo: 80190194 - HTTP_STATUS_NOT_FOUND
SYMSRV:  HTTPGET: /download/symbols/sqlservr.exe/5DF306DC60000/sqlservr.ex_
SYMSRV:  HttpQueryInfo: 80190194 - HTTP_STATUS_NOT_FOUND
SYMSRV:  HTTPGET: /download/symbols/sqlservr.exe/5DF306DC60000/file.ptr
SYMSRV:  HttpQueryInfo: 80190194 - HTTP_STATUS_NOT_FOUND
SYMSRV:  RESULT: 0x80190194
DBGHELP: C:\Program Files (x86)\Windows Kits\10\Debuggers\sqlservr.exe - file not found

SYMSRV:  BYINDEX: 0x397
         c:\websymbols*https://symbols.nuget.org/download/symbols
         sqlservr.exe
         5DF306DC60000

SYMSRV:  UNC: c:\websymbols\sqlservr.exe\5DF306DC60000\sqlservr.exe - path not found

SYMSRV:  UNC: c:\websymbols\sqlservr.exe\5DF306DC60000\sqlservr.ex_ - path not found

SYMSRV:  UNC: c:\websymbols\sqlservr.exe\5DF306DC60000\file.ptr - path not found
SYMSRV:  HTTPGET: /download/symbols/sqlservr.exe/5DF306DC60000/sqlservr.exe
SYMSRV:  HttpQueryInfo: 80190193 - HTTP_STATUS_FORBIDDEN
SYMSRV:  RESULT: 0x80190193
DBGHELP: C:\Program Files (x86)\Windows Kits\10\Debuggers\sqlservr.exe - file not found

DBGENG:  C:\Program Files\microsoft SQL Server\MSSQL12.ERpodBVMI\MSSQL\Binn\sqlservr.exe - Couldn't map image from disk.

Unable to load image C:\Program Files\microsoft SQL Server\MSSQL12.ERpodBVMI\MSSQL\Binn\sqlservr.exe,Win32 error 0n2

DBGENG:  sqlservr.exe - Partial symbol image load missing image info
DBGHELP: Module is not fully loaded into memory.
DBGHELP: Searching for symbols using debugger-provided data.
SYMSRV:  BYINDEX: 0x398
         c:\websymbols*https://symbols.nuget.org/download/symbols
         sqlservr.pdb
         7B78390C11144A34B1C95415F29068192

SYMSRV:  PATH: c:\websymbols\sqlservr.pdb\7B78390C11144A34B1C95415F29068192\sqlservr.pdb

SYMSRV:  RESULT: 0x00000000
*** WARNING: Unable to verify timestamp for sqlservr.exe
DBGHELP: sqlservr - public symbols  
        c:\websymbols\sqlservr.pdb\7B78390C11144A34B1C95415F29068192\sqlservr.pdb
haixiakeji 回答:Windows调试器(Windbg)无法加载SQL转储文件的符号

评论1

它正在查找exe而不是pdb尝试在sqlserver.exe上使用.chkimg尝试使用 symchk

回复1

为什么要查找.exe文件

评论2

从发布sqlserver.pdb的输出中

已被加载 正确使用调试器提供的部分信息,所有路径 指向.exe扩展名而不是.pdb扩展名symsrv经常下载 如果它认为该应用程序可能是 损坏的钩状内存修补了任何命令.chkimg i 如果发表在早期评论中,则也会下载官方二进制文件 存在用于与内存图像进行比较

评论3

在调试转储时尤其如此,这可能 您可能已经在PC中安装的sqlserver.exe是 与创建转储的sqlserver.exe不同

评论4,5

首先执行lm并查看是否已加载您的pdb,然后运行!analyze -v来获取 初步了解然后担心如果要复制exe 单个exe问题,我会说继续复制它,但是sql可能 有很多依赖

lm是windbg命令,用于加载正常情况下输出的模块。 符号是否正确,还会显示已加载的路径 pdb

您发布的堆栈文本是编写minidump的线程的堆栈 它说它写了一个minidump,因为超时被取消了

sqllang!CImageHelper::DoMiniDump+0x426
sqllang!stackTrace+0x9d5
sqlmin!LatchBase::DumpOnTimeoutIfNeeded+0x261

您有> = 60个线程,您可能需要查找拥有闩锁的线程,并找出为什么拥有这么长时间的闩锁,以便其他线程退出等待并编写小型转储

我只是浏览了查询中的链接文章,它向您展示了如何在所有正在运行的线程中删除dword并查看该线程堆栈 遵循

基本上它所做的就是 查找进程中每个线程的堆栈基础和堆栈顶部,并搜索作为这些区域之间拥有线程的dword

更改为该线程并转储堆栈

本文链接:https://www.f2er.com/2483041.html

大家都在问