【问题标题】:Issue when remotely debugging a web service远程调试 Web 服务时的问题
【发布时间】:2011-09-01 14:59:03
【问题描述】:

我在 Google 和 StackOverflow 上多次发现这个问题,但没有人回答我的情况。

我正在尝试远程调试 Web 服务,远程调试设置正确,我已部署最新版本(连同 pdb 文件)并将调试器附加到远程计算机上的 w3wp 进程。但是,一旦附加,我的所有断点都会自动禁用(断点当前不会被击中。没有为此文档加载任何符号)。有谁知道我做错了什么?

到目前为止,我已经尝试了以下方法:

  • 在高级编译选项中将“生成调试信息”设置为“完整”。
  • 在高级编译选项中将“启用优化”设置为“假”。
  • 在“模块”窗口中,符号状态为“跳过加载符号”
    • 尝试手动加载符号
    • 尝试将符号设置中的符号文件位置更改为远程 pdb 文件
  • 在部署前清理并重建解决方案
  • 我尝试在调试选项中取消选中“仅我的代码”,这似乎可以解决问题,但是当我调用 Web 服务时,没有遇到断点。
  • This site 看起来很有希望,但最终没有帮助
  • the pdb is on the remote machine

【问题讨论】:

    标签: web-services visual-studio-2008 debugging remote-debugging w3wp


    【解决方案1】:

    经过一番折腾,我似乎已经实现了我想要的:

    • 在高级编译选项中
      • 将“生成调试信息”设置为“完整”。
      • 将“启用优化”设置为“假”。
    • 确保符号设置中的符号文件位置(调试 - 模块窗口)指向正确的位置
      • 我将远程位置和本地位置添加到 .pdb 位置
    • 在部署前清理并重建解决方案

    【讨论】:

    • 禁用优化确实为我解决了问题! (VS2013)
    【解决方案2】:

    我从来没有找到一个可靠的方法来让它工作。当尝试调试托管在 IIS 中的 WCF 服务时,一遍又一遍地执行相同的过程(重建、部署、重新启动站点、附加)我有时会加载符号,有时不会。

    就我而言,这归结为我是否在部署之后之前附加到进程(这反过来导致 IIS 编译并执行其时髦的事情)。

    我发现如果我遵循这些步骤,它对我有用:

    1. 重建解决方案
    2. 部署到远程服务器
    3. 重启 IIS - 我怀疑这是必要的,我确定重启应用程序池就足够了
    4. 找到工作进程并附加到它 - 此时断点将被禁用,这很好
    5. 从网站请求一些东西 - 我只是使用浏览器做到了这一点。这导致 IIS 编译我的应用程序。通过在此编译之前附加 VS,我发现我正在加载符号(至少比以前更频繁)。

    也许同样的过程也适合你?

    【讨论】:

    • 不存在将调试器附加到的 w3wp 进程,直到我从站点请求某些内容或将其加载到浏览器中(这不是 WCF,因此它在这方面的工作方式可能不同)。
    • 也许,也许我已经忘记了我已经遵循的步骤...... ^^ 另一件显而易见的事情,您是否正在使用调试配置编译 Web 项目?它经常被遗漏,但是如果部署的项目是使用发布配置编译的,您将无法在附加后捕获断点
    • 我查过了。我现在已经解决了这个问题。
    【解决方案3】:

    就我而言,我已将 pdb 部署到 iis 工作进程路径,所以一切都应该很好,我真的不明白为什么会出现“跳过加载符号”。 我真的觉得它只是没有心情(没有理性的原因)。

    所以我右键单击我有兴趣调试的 dll(也可以选择多个文件), 并选择 Load Symbols From > Symbol Path

    这导致它们被加载。

    然后我可以调试它。谢谢!

    【讨论】:

      猜你喜欢
      • 2014-11-20
      • 2020-02-26
      • 2011-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-12
      • 1970-01-01
      • 2014-02-06
      相关资源
      最近更新 更多