远程调试托管应用程序

7
如何从另一台安装了 Visual Studio 的机器远程调试托管应用程序。以下是我的尝试过程:
  1. 将 Visual Studio 自带的远程调试文件夹复制到远程机器上并运行 msvsmon.exe(64 位版本,因为两台机器都是 64 位)。
  2. 在两台机器上使用相同的 Windows 登录账户。
  3. 然后我启动 Visual Studio 并使用“附加到进程”功能。在传输中,我选择“默认”,在限定符中输入运行 msvsmon.exe 的机器的主机名。
  4. 然后我点击刷新按钮,以查看该机器上的进程列表。我可以看到另一台机器上显示“用户xyz已连接”。然而,刷新失败,我收到以下错误消息: Error screen
我在这里做错了什么?我正在尝试使用 VS2008 Pro 进行调试,如果有影响,那么两个系统的操作系统均为 Windows Server 2008 R2。
注意:我可以无问题地使用远程传输调试非托管应用程序。

2
请使用MSDN文章。防火墙通常是问题的瓶颈,您没有提及它。 - Hans Passant
请确保在远程计算机上以管理员身份运行 msvsmon.exe。 - Peter Ritchie
5个回答

5
即使你的机器是64位的,也要确保你运行的应用程序是64位的。例如,如果你在远程机器上调试一个32位的应用程序,你需要运行32位版本的msvsmon.exe。
这可能不是答案,但是一定要检查以确保这一点。
2017年更新:
随着我在过去几年中越来越多地使用远程调试,我注意到了一些更多的问题,我通常需要解决以下几个问题:
1. 确保每台机器上都使用相同版本的msvsmon。 2. 确保身份验证已经正确配置(首先尝试无身份验证工作,然后再打开它,如果你需要它)。 3. 确保当你附加到进程时,你有正确的“附加到”设置(即托管的.NET版本,本地代码等)。 4. 确保msvsmon正在以管理员身份或与你想要调试的应用程序相同的用户身份运行。

我仍然无法尝试这个..一旦我有时间,我会尝试并更新是否有效。 - Asha
好的。只是为了确保,您是否正在运行与x86兼容的程序?让我知道发生了什么。 - C. Tewalt

3
我也在这个问题上花费了很多时间。我发现使其100%工作的唯一方法是使用相同的域名。在VS2012中,可以更容易地连接而无需在同一域中。
但是对于2008,我已经找到了解决方法(A = VS端,B =没有VS的机器):
1)机器A(其中有VS)和B必须在同一个域中。您还需要在B上下载并安装VS远程调试器监视器。
2)您需要在B端启动VS远程调试器监视器,以允许传入连接。第一次启动它时,它将配置防火墙以打开端口。它还会显示它正在侦听哪个地址,即DOMAIN \ User @ hostname_B。
3)在A上使用域管理员帐户运行VS,您将能够进行远程调试。要连接到调试的B,请使用监视器在步骤2中显示的地址。
希望这能帮助您!

两台机器在不同的域中 :( 步骤3中,当您说使用步骤2中的地址时,您的意思是我必须在“附加到进程”对话框中输入它吗? - Asha
是的,在附加到进程中,您应该输入远程调试监视器显示的确切地址。如果您处于不同的域中,则远程调试会非常麻烦,我曾尝试过但从未成功,因此我创建了一个虚拟开发机并将其加入到域中,以便我可以使用此虚拟机进行调试。 - Fabske
你有读过这个吗:http://msdn.microsoft.com/zh-cn/library/9y5b4b4f(v=vs.90).aspx? - Fabske

2

虽然不是直接回答OP的问题,但这个建议可能仍然有用,并且在我遇到类似情况时帮了我很多次。

我建议考虑安装WinDBG(或类似工具),确保您已经设置好了正确的符号和代码,使用它进行调试。WinDBG有一个相当陡峭的学习曲线,但我认为即使在非常高的级别上也值得这样做。它非常轻巧,这意味着它在原始帖子的上下文中非常有用,并且在生产等领域也可以使用,而安装像VS这样的东西通常不是一个选项。

如果你急需解决问题,这可能不是一个选择,但从长远来看值得一试。

Chris

PS:网络上有一些非常好的课程,特别是在Pluralsight之类的网站上(除了我是快乐的客户外,我没有任何关系)


2

从Visual Studio 2012开始,您可以使用远程(无身份验证)传输来调试托管代码(此前VS仅允许在远程模式下调试本机代码)。


1
我花了很多时间使这个工作成功。现在我要完全调试我的托管应用程序。我按照以下任务列表来使它工作:
- 将目标PC添加到域并使用与您在带有Visual Studio的PC上使用的相同帐户登录。 - 运行正确的Visual Studio远程调试器(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中,我还需要转到工具->选项,展开调试->常规。然后取消选中启用仅我的代码(仅托管)。

这真的很复杂,但以后可以节省很多时间...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接