远程调试 Web 服务时的问题

Posted

技术标签:

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

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

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

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

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

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

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

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

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

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

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

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

【讨论】:

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

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

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

这导致它们被加载。

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

【讨论】:

以上是关于远程调试 Web 服务时的问题的主要内容,如果未能解决你的问题,请参考以下文章

应用程序启动时的 Visual Studio 远程调试

无法在 Web 服务器上开始调试。未出现 Visual Studio 2019 远程调试器 (MSVSMON.EXE)

web项目远程调试

如何在 Eclipse IDE(同一台机器)中远程调试在 Web 逻辑服务器上运行的企业应用程序

eclipse:远程调试防火墙后面的tomcat服务器

VS 远程调试阿里云上的web站点,Remote Debugger