【问题标题】:Remote debug a Windows service using VS2012使用 VS2012 远程调试 Windows 服务
【发布时间】:2015-01-09 04:02:49
【问题描述】:
在发布此问题之前,我已尝试找到此问题的答案。我在另一台机器上运行了一个 Windows 服务。我已经用 C# 编写了该服务,并且运行该服务可执行文件的目录包含可执行文件和调试文件 (.pdb)。我第一次尝试使用 VS 2012 远程调试远程调试服务。我能够成功附加到服务进程。但是,由于这是我第一次,我不确定接下来我能做什么。我点击了暂停按钮,它暂停了 ServiceBase.Run(ServicesToRun) 线上的服务,这对我来说没什么用处。该服务有一个计时器,它每 30 秒启动一次,并将在计时器事件中运行代码。
我的问题是……在这种情况下,有没有办法使用调试器单步执行代码。
我是否需要在我的代码库中已有一些特定于调试的代码,以便在附加调试器时将我带到代码中的某个位置,我可以从该位置逐步执行代码?
谢谢,
安德鲁。
【问题讨论】:
标签:
visual-studio
windows-services
remote-debugging
【解决方案1】:
感谢您的回复。它提醒我在这里为像我这样的其他人发布我的解决方案。
解决方案很简单(只要你知道它总是)。
确保您在目标计算机上运行的代码与您在 Visual Studio 中打开的代码相同。它必须是相同的程序集和版本,否则调试器不会命中您的断点。确保您在希望调试器中断执行的位置设置了断点。然后附加到目标机器进程并等待计时器启动并运行设置断点的进程。
希望这会有所帮助。
安德鲁。
【解决方案2】:
有几种方法可以调试您开发的远程应用程序或 Windows 服务。如果您在您的机器(本地)中,那将很容易调试。
System.Diagnostics.Debugger.Launch();
但是由于您在不同的机器上,这取决于您的两台机器是如何连接的。这意味着您在调试远程应用程序/服务方面有一些限制。
快速搜索给了我以下似乎对你有帮助的结果,
您可以使用 Visual Studio 用于连接远程设备和调试的 Remote Debugging Monitor。你可以在这里How to: Run the Remote Debugging Monitor有明确的说明。
还有另一个工具可以让您在正确设置后调试远程应用程序。但它有一些你必须遵守的限制或条件。
这里是名为Remote Tool的工具,您可以在How to: Set Up Remote Debugging的MSDN上找到详细的设置过程。
那里已经清楚地引用了关于使用此工具的先决条件。但我仍然要重新表述这些内容,以便快速审阅。
使用 Visual Studio 远程工具的先决条件
在远程设备上调试:
- 远程设备和 Visual Studio 计算机必须通过网络连接或直接通过以太网电缆连接。 不支持通过互联网进行调试。
- 远程设备必须运行 Visual Studio 2012 的远程工具。
- 您必须是管理员才能在远程设备上安装远程工具。要与远程工具通信,您必须拥有远程设备的用户访问权限。
如果您找到更好且可行的解决方案,请随时分享。