【发布时间】:2014-07-11 18:47:45
【问题描述】:
如果我执行“附加到进程”,一切正常。
但我需要在启动应用程序期间调试问题,因此我需要能够“启动项目”或“启动外部程序”远程 exe。
当我这样做时,我得到“目录不存在”。 (推测,它要么在本地寻找这个不存在的目录,要么它缺少权限。)
详情: * .Net 框架 3.5; C# Windows 窗体,带有单击时的按钮
Debug.WriteLine("Hello World!");
- 两台 Windows 7 Ultimate PC,用户名和密码相同,管理员。
本地电脑:
- Visual Studio 2010 专业版。 Hello World 项目打开并建成。 本地测试:开始调试/点击按钮/查看“Hello World!”在 VS 输出窗格中。 退出本地版本的应用。
远程电脑:
安装了 Visual“Microsoft Visual C++ 2010 SP1 Redistributable”(因此可以运行此 .Net 应用程序的调试版本;在安装之前说“程序无法启动,因为缺少 MSVCR100.dll,当遇到断点时.")。
-
Visual Studio 远程调试监视器正在运行。
- 说“(日期/时间)Msvsmon 启动了一个名为 Steve@FRESHINSTALL 的新服务器:等待新连接”。
- 附加到进程时,显示“FreshInstall\Steve connected”。
从本地 pc 的项目位置(在默认 VS 2010 项目中)\bin\debug* 复制到 C:\Code\HelloWorld*
代码文件夹以完全权限共享(以防万一...)
附加到进程工作正常:
- click button => "Hello World" -- 在本地 PC 的输出窗格中,就像在本地运行时一样。
现在,问题来了。如何远程启动 .exe,而不是附加到进程?
在调试窗格中:
试过“开始项目”
或者,尝试“启动外部程序:”C:\Code\HelloWorld\HelloWorld.exe”——在远程 PC 上,这是 .exe 的路径
工作目录:“C:\Code\HelloWorld”
[复选标记] 使用远程机器:FRESHINSTALL。
尝试使用和不使用“启用 Visual Studio 托管进程”。
当“开始调试”时,所有变体都说“工作目录不存在:“C:\Code\HelloWorld”。
当然不是:它在 Remote PC 上,而不是本地。
然而,无论我在哪里看,这都是指示所说的。
我应该做些什么不同的事情,或者可能有什么问题?
(显然这个简单的应用程序,我可以坚持使用附加到进程。但是我有一个更复杂的多 dll 应用程序,它在启动过程中出现问题。我需要在“真实”应用程序启动过程中对其进行断点,而不是在它已经运行之后。)
(而我必须调试的真实情况是在世界的另一端,互联网连接速度很慢。这是对那里出现问题的本地模拟。在实际远程上安装 Visual Studio 是不切实际的PC,把它变成本地调试情况。花了一天时间尝试远程调试它;在我让它在本地网络上工作后,我必须复制整个过程,而对正在发生的事情的控制要少得多。)
【问题讨论】:
-
在这里查看我的答案stackoverflow.com/questions/11923695/… 这使您能够完全按照您的意愿执行此操作,假设您可以修改远程 PC 上运行的代码 - 您可以吗?
-
如果您阅读该链接...您不需要使用 remcom...假设您进行了代码更改,您可以简单地重新部署您的应用程序并在远程 PC 上使用 @ 启动它987654323@ arg 然后它将挂起,直到您的调试器从本地 PC 连接
-
@wal - 谢谢,我会试一试。至少,这会让我知道启动是否到达主要方法,或者我有一些更基本的 dll 问题。把它变成“附加到进程”的方法很聪明!
-
您是否检查了远程 PC 上的事件查看器?如果应用程序无法进入主程序,可能会有所帮助
-
@wal 谢谢。如果发生这种情况,请单独配置主题以获取更多信息。在 Hello World 上,这 5 行代码运行良好:我现在坐在 Debugger.Break();线。所以,我调试的这一步就解决了。现在我只需要使用 REAL 应用程序,并达到这一点,然后我就处于我知道如何处理的领域。再次感谢。
标签: c# visual-studio-2010 remote-debugging