符号服务器和 Internet 防火墙

某些系统使用需要对所有 Internet 流量进行身份验证的 Internet 防火墙或代理服务器。 除非系统使用以透明方式处理身份验证的防火墙客户端,否则早期版本的符号服务器无法访问 Internet 中的符号。

从 Dbghelp 6.1 开始,符号服务器支持需要此类身份验证的代理服务器。 符号服务器使用计算机 LAN 设置中配置为默认服务器的任何服务器。 若要查找此项,请在控制面板中打开 Internet 选项,单击连接选项卡,然后单击 LAN 设置。 也可以通过单击工具菜单上的 Internet 选项,以从 Internet Explorer 完成此操作。 符号服务器已在许多品牌的代理服务器上使用基本和质询响应身份验证方法进行过测试。

若要定义要使用的符号服务器的特定代理服务器,请将 _NT_SYMBOL_PROXY 环境变量设置为代理服务器的名称(或 IP 地址),后跟端口号。 用冒号分隔这两个值。 例如:

set _NT_SYMBOL_PROXY=myproxyserver:80

使用 windbg 调试器时,请将符号路径配置为指向要使用的符号存储。 一个区别在于,系统将显示一个对话框,你需要在其中输入用户 ID 和密码才能传递到代理服务器。 如果输入了不正确的信息,则将重新显示对话框。 如果单击取消按钮,则会关闭对话框,并且符号服务器将被禁用,以便通过 Internet 使用。

使用最新版本的 cdb.exe 或 ntsd.exe 时,默认情况下会关闭此功能。 但是,可以使用 !sym 扩展命令启用或禁用此功能,如下所示:

  • 若要打开用户 ID 和密码提示,请使用以下命令:!sym prompts
  • 若要关闭用户 ID 和密码提示,请使用以下命令:!sym prompts off

如果启用提示,则将需要使用 .reload 命令重新加载符号。

DbgHelp API 已扩展以支持这些更改。 SymbolServerSetOptions 函数支持 SSRVOPT_PROXY 选项。 如果数据参数为 NULL,则使用 Internet 选项中定义的默认代理。 否则,将传递以零结尾的字符串,并指定代理服务器的名称和端口号。 名称和端口由冒号分隔,如下所示:myproxyserver:80。 SymSetOptions 函数支持 SYMOPT_NO_PROMPTS 选项。 这会关闭符号服务器中的所有验证提示。