编辑澄清,我的意思是Jonathan Kehayias描述的扩展 exent ringbugger 堆栈跟踪。
我最近发现可以获取 link.exe、dumpbin.exe 等以从符号服务器下载符号。SQL Server 能够通过扩展事件捕获自己的调用跟踪。Traceflag 3656 允许您使用符号文件解码这些堆栈跟踪。 根据Paul Randal 的博客,您实际上需要将符号文件放在 sql server binn 文件夹中,并且它不会使用符号服务器。我决定调查一下,看看这是否属实。使用RohitABs API Monitor,我能够看到对 DbgHelp.dll 的以下调用:
ImagehlpApiVersion ( )
SymSetOptions ( SYMOPT_DEFERRED_LOADS | SYMOPT_LOAD_LINES | SYMOPT_UNDNAME )
SymInitialize ( GetCurrentProcess(), "C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER2012\MSSQL\Binn\;C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER2012\MSSQL\BINN;symsrv*symsrv.dll*c:\symbols*http://msdl.microsoft.com/download/symbols;C:\Windows;C:\Windows\system32", TRUE )
SymRegisterCallback64 ( GetCurrentProcess(), 0x000007fec5a77810, 0 )
/* The following SymGetSymFromAddr() calls happen because fInvadeProcess was set to true */
SymGetSymFromAddr ( GetCurrentProcess(), 3313710117, 0x000000001b06c060, 0x000000001b06b348 )
SymGetSymFromAddr ( GetCurrentProcess(), 3313710116, 0x000000001b06c060, 0x000000001b06b348 )
. . .
. . .
. . .
SymCleanup ( GetCurrentProcess() )
所以它看起来像 my _NT_SYMBOL_PATH
,符号服务器被添加到SymInitialize()的搜索路径中。如果是这种情况,为什么不从符号服务器下载符号?