如何在没有Visual Studio的计算机上设置远程调试

66

有没有一种方法可以在未安装Visual Studio的计算机上设置远程调试(Msvscom.exe)?

我想附加到在VM上运行的服务,以便我可以调试代码中的问题。我以前做过这个,但两台计算机都安装了VS。

开发框架正在运行Visual Studio 2010/Windows 7。虚拟机正在运行没有Visual Studio的Windows 7。

6个回答

121

我要重新提出这个问题,因为任何尝试做到这一点的人都知道这是一件非常痛苦和麻烦的事情,并且每次都会随着您所拥有的每种可能的主机/远程系统组合而略有不同。

Visual Studio 远程工具链接:

  1. Visual Studio 2010 远程调试器。 (截至2016年10月21日仍可使用)
  2. Visual Studio 2013 远程工具 (截至2016年10月21日仍可使用)
  3. Visual Studio 2015 远程工具 x86 - 直接下载链接
  4. Visual Studio 2015 远程工具 x64 - 直接下载链接
  5. Visual Studio 工具 (感谢 Robo Burned)
  6. Visual Studio 2017 远程工具 x64 - 直接下载链接 (感谢 Isaac Baker)
  7. Visual Studio 2017 远程工具 x86 - 直接下载链接 (感谢 Isaac Baker)
  • Visual Studio 2019远程工具-下载链接
  • 这是我今天成功的设置:

    主机(开发)计算机:
    Windows 7 Ultimate SP1 x64。运行Visual Studio 2010,.NET Framework 4。

    远程计算机:
    在工业/工厂现场上运行Windows Embedded Standard 32位的PC。它看起来/感觉就像Windows 7一样。运行SP1。未安装Visual Studio。拥有.NET Framework 4。

    网络:
    两台计算机都在同一个子网中。我通过RDP访问远程计算机并以此方式运行我的应用程序。

    Microsoft专有毛囊退化实现:
    记下您的开发计算机的用户名和密码。由于某种原因,必须在远程计算机上创建完全相同的用户名和密码。因为微软。

    我是如何做到的:
    我从@sJhonny提供的链接中下载了Visual Studio 2010远程调试器。我不得不从该文章中的Visual Studio 2013切换到2010。如果您想仔细研究2010年的文章以查找下载链接,则该链接位于页面顶部的“没有人会发现这有用”的旁边。如果不是,请按照我的链接操作。

    在远程计算机上安装并运行配置向导。我保留了向导的默认设置:

    • 选中“运行'Visual Studio .....'”
    • 用户名为LocalSystem,密码为空
    • 仅允许本地网络上的计算机....

    在远程系统上运行远程调试器,您将看到:

    Msvsmon started a new server named 'username@machinename...'

    在接口中,一切都很顺利。在远程机器上运行应用程序。在开发机器上,在Visual Studio中按Ctrl+Alt+P会打开“附加到进程”(也可以在工具菜单下找到)。我收到一个关于我的开发机器防火墙未正确配置并被问及是否允许连接等的弹出窗口... 当然要选择允许。

    在限定符框中输入“用户名@机器名”组合... 点击“刷新”并祈祷一下。再多祈祷一点,你应该能看到远程机器上运行的进程列表。选择你的进程并附加它。

    但我的断点不起作用!?当然不起作用...因为在与应用程序相同目录的断点上使用太有意义了。如果你足够幸运,你会收到有关断点缓存的警告并显示一个路径对话框。

    对话框提到的是相对于远程机器而言是正确的。这是不正确的。除了迫使您在远程机器上创建与当前用户相同名称的全新用户之外,它与远程机器没有任何关系,因为这是Microsoft的问题。要让断点起作用,请按照开发机器上的路径(可在“工具”>“选项”>“调试”>“符号”中自定义:“在此目录中缓存符号”)复制应用程序的.pdb文件到该目录。每次新版本都必须将它们复制过去,除非有自动执行此操作的选项;我还没有检查过,因为我还没有停止庆祝远程调试成功。

    现在应该可以一切正常了。


    VS2015的链接已经失效。 - Robo Burned
    2
    “Visual Studio 2015 远程工具”现已在可折叠区域“Visual Studio 2015 工具”下提供,网址为https://www.visualstudio.com/downloads/。 - Robo Burned
    我了解到2015工具监听4020端口,而VS17连接到4022端口。那么2017年的工具呢?我找不到它们。 - usr
    1
    只想分享我的经验。在我的限定字段中,我从未成功地找到过。相反,我输入了计算机的IP和端口,然后按下刷新按钮。此外,您必须使用与开发机上的VS版本完全匹配的远程调试工具。似乎没有向后兼容性。 - user2619824
    还有一点需要说明,我刚刚测试了一下,我不需要在远程机器上创建用户账户。用户名可能会不同。我的两台机器都是Windows 7,并且安装了VS 2012更新3。 - user2619824
    显示剩余14条评论

    19

    当然可以。
    您可以在不安装Visual Studio的情况下安装msvsmon。
    我自己在几台机器上都这么做过。
    棘手的部分在于授权-在本地计算机上运行VS的用户需要在远程计算机上拥有特殊权限。
    微软有一些文章详细解释了这些细节- http://msdn.microsoft.com/en-us/library/bt727f1t.aspx.


    谢谢sJhonny,我可以直接将MSVCMON.exe复制到虚拟机中吗? - CodeMan5000
    1
    不太记得了...我相信我链接的文章/底部的相关文章中有答案 :) - J. Ed

    10

    3
    从以下网址获取: how-to-implement-remote-debugging-in-visual-studio-2005 让我们通过一个例子来更好地理解这种情况。Molly Clark和Adam Barr都是Adventure Works的员工。Adventure Works拥有一个名为adventure-works.com的Microsoft Windows NT域。Adam在使用Molly编写的一些软件时遇到了问题。Molly想要在Adam的计算机上调试此软件。Molly和Adam按照以下步骤操作:
    1. Adam的计算机上没有远程调试器。为了设置远程调试器,Molly决定共享她的计算机上的Program Files\Microsoft Visual Studio 8\Common7\IDE\Remote Debugger目录。她创建了一个名为Remote的文件共享。
    2. Adam运行\MollyComputerName\Remote\x86\Msvsmon.exe。
    3. 在远程调试器启动后,Adam单击“工具”菜单上的“权限”以使用“权限”对话框配置远程调试器。他授权Molly进行调试。 注意:Adam也可以在远程调试器启动时通过传递/allow选项来配置远程调试器。
    4. Molly启动Visual Studio 2005。
    5. 要打开“附加到进程”对话框,Molly单击“工具”菜单上的“附加到进程”。
    6. Molly通过在Qualifier框中输入adventure-works.com\Adam@AdamComputerName连接到Adam的计算机。
    7. 在“可用进程”下,Molly选择应用程序正在使用的工作进程,然后单击“附加”。
    8. Molly打开浏览器并提供远程应用程序的URL。执行会在应用程序中设置断点的地方停止。

    2

    还有一种方式,我更喜欢(如果您有快速的互联网连接)。

    在远程桌面连接中,您不需要下载或安装任何东西。

    1. You can share your disk C: while connecting via Remote Desktop Connection.

      Remote Dekstop - Share Local Resources

    2. On the remote desktop go to location (depending on your local location)

      \\tsclient\C\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\Remote Debugger\x64
      
    3. (optional) Create shortcut to folder or msvsmon.exe on desktop

    4. Run it remotely from your local disk via shared disk. (start can take few seconds depending on your connection quality)
    选项2:将远程调试器\x64或x86文件夹复制到远程位置并使用它。

    0

    我能够通过asp.net core 2.1使其工作,与上面的答案唯一的区别是你所连接的进程是dotnet.exe。


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