远程调试托管应用程序
Posted
技术标签:
【中文标题】远程调试托管应用程序【英文标题】:Remote debugging managed applications 【发布时间】:2013-08-03 13:28:57 【问题描述】:如何从其他具有 Visual Studio 的计算机。这是我尝试过的:
-
将 Visual Studio 中的远程调试文件夹复制到远程机器中并运行
msvsmon.exe
(64 位版本,因为两台机器都是 64 位)。
在两台机器上使用相同的 Windows 登录帐户。
然后我启动 Visual Studio 并使用附加来处理。在传输中,我选择“默认”并在限定符中给出运行msvsmon.exe
的机器的主机名。
然后我按刷新按钮查看该机器上的进程列表。我可以看到另一方面它说“用户xyz已连接”。但是,刷新失败,我收到以下错误:
我在这里做错了什么?我正在尝试使用 VS2008 Pro,如果重要的话,两个系统上的操作系统都是 Windows Server 2008 R2。
注意:我可以使用远程传输毫无问题地调试非托管应用程序。
【问题讨论】:
使用MSDN article。防火墙是通常的挂断,你没有提到它。 确保在远程计算机上也运行 msvsmon.exe 以管理员身份 【参考方案1】:即使您的机器是 64 位的,请确保您运行的应用程序是 64 位的。例如,如果您在远程计算机上调试 32 位应用程序,您可能希望运行 32 位版本的 msvsmon.exe
这可能不是答案,但需要检查以确保。
2017 年更新
随着过去几年我越来越多地使用远程调试,我注意到了一些我通常必须解决的问题。
-
确保每台机器上使用相同版本的 msvsmon。
确保正确配置了身份验证(先尝试不进行身份验证,然后在需要时将其打开)
确保在附加到进程时具有正确的“附加到”设置(即托管 .NET 版本、本机代码等)
确保 msvsmon 以管理员身份运行或以与您要调试的应用程序相同的用户身份运行
【讨论】:
我仍然无法尝试这个。我会尽快尝试更新它是否有效。 好的。只是为了确保,您运行的程序是否与 x86 兼容?让我知道会发生什么。【参考方案2】:我也为此浪费了很多时间。 我发现让它 100% 工作的唯一方法是使用相同的域。使用 VS2012,无需在同一个域中即可更轻松地进行连接。
但是对于 2008 年,这对我有用(A = VS 端,B = 没有 VS 的机器)
1) 机器 A(VS 在哪里)和 B 必须在同一个域中。 您还需要在 B 上下载并安装 VS Remote Debugger 监视器
2) 您需要在 B 端启动 VS Remote 调试器监视器,以允许传入连接。当您第一次启动它时,它将配置防火墙以打开端口。 它还会向您显示它正在侦听的地址,即 DOMAIN\User@hostname_B
3) 在 A 上使用域管理员帐户运行 VS,您将能够远程调试。要在调试中连接到 B,请使用监视器在步骤 2 中显示的地址
希望对你有帮助!
【讨论】:
两台机器都在不同的域中 :( 同样在第 3 步中,当您说使用第 2 步中的地址时,您的意思是我必须在“附加到进程”对话框中输入该地址? 是的,在附加到进程中,您应该输入远程调试器监视器显示的确切地址。如果您在不同的域中,远程调试真的很痛苦,我尝试过但从未成功,所以我创建了一个虚拟开发机并将其加入域,以便我可以使用这个 vm 进行调试。 你读过这个吗:msdn.microsoft.com/en-us/library/9y5b4b4f(v=vs.90).aspx?【参考方案3】:从 Visual Studio 2012 开始,您可以使用 Remote (no authentication) 传输来调试托管代码(以前 VS 只允许在 Remote 模式下调试本机代码)。
【讨论】:
【参考方案4】:不是对 OP 的直接回答,但可能同样有用,并且多次将我从类似的情况中解救出来。
我建议考虑安装WinDBG(或类似的),确保你有正确的符号\代码设置使用它来调试。 WinDBG 的学习曲线相当陡峭,但我相信这是值得的,即使在非常高的水平上也是如此。它非常轻量级,这意味着它在原始帖子的上下文中很有用 + 也可以在生产等中使用,而安装类似 VS 的东西通常不是一种选择。
如果您赶时间,这可能不是一个选择,但从长远来看,这是值得的。
克里斯
PS:网络上有一些很好的课程,尤其是在 Pluralsight 之类的网站上(我没有任何关系,除了是一个快乐的客户)
【讨论】:
【参考方案5】:我花了很多时间来完成这项工作。但我成功了,现在可以完全调试我的托管应用程序。我按照此任务列表使其工作:
-将目标 PC 添加到域并使用与在 PC 上使用 Visual Studio 相同的帐户登录。
-运行正确的 Visual Studio Remote Debugger (msvsmon.exe),我使用的是 2010 版本。
-关闭目标PC上的防火墙。
-为开发计算机上的 devenv.exe (Visual Studio exe) 添加 Windows 防火墙例外。
-如果你使用OracleVM作为虚拟PC,网络适配器不能处于NAT模式(我使用桥接适配器)。
-要使用的调试地址是:DOMAIN\USER@PCNAME(例如 MyGreatDomain\Myself@DEBUGPC)。
-如果我使用“调试->附加到进程”窗口开始调试,我还需要使用“选择”按钮来编辑“附加到:”-我需要托管 (v4.0) 代码、本机代码。
-pdb 文件必须在我用来运行我的 exe 的同一目录中。我将目录与我的 exe 和 pdb 直接映射到目标计算机。
-在 Visual Studio 中,我还必须转到 Tools->Options,展开 Debugging->General。并取消选中 Enable Just My Code (Managed only)。
让它工作起来确实很复杂,但是以后节省了很多时间......
【讨论】:
以上是关于远程调试托管应用程序的主要内容,如果未能解决你的问题,请参考以下文章
有没有办法在不使用Azure Service Bus的情况下调试SharePoint在线远程事件接收器即提供者托管的应用程序?
Chrome 检查器 - 远程调试器 - 在托管模式下未启用剪贴板。请使用 chrome://inspect 检查