我有一个调用cdb.exe来分析故障转储的 .NET Windows 服务。我想在需要时使用以下参数自动从http://msdl.microsoft.com下载符号:
-y srv*c:\symbols*http://msdl.microsoft.com/download/symbols
如果我将应用程序作为控制台应用程序运行,它会按预期工作并为每个转储下载所需的符号。
问题是当我将应用程序作为 Windows 服务启动时,没有下载符号,如果我打开 symnoisy,在 cdb 的输出日志中,每个符号都有一个条目,表明在http:/找不到符号/msdl.microsoft.com
因此,我使用嗅探器对其进行了检查,有趣的是,在作为服务运行时,没有向微软符号服务器发出请求。
谷歌搜索了一下,我发现我不是唯一一个遇到这个问题的人,而且似乎问题在于,当将应用程序作为 Windows 服务运行时,它使用的是 winHTTP 库来处理 http 请求,而不是 wininet,我认为是问题的根源:http : //support.microsoft.com/kb/238425
所以,我不知道为什么,cdb 无法使用 winHTTP 库连接到 ms 符号服务器,我需要一种方法来强制 cdb 默认使用 wininet。
有人知道这个问题的解决方法吗?